本記事は シェルスクリプトのカレンダー | Advent Calendar 2021 - Qiita 17日目の記事だ。
殆どカレンダーが埋まってなかったので、思いついたネタで埋めちゃえ埋めちゃえ。
今回は、 bash 系列 (bash, zsh 等) の プロセス置換 (process substitution) 機能の話だ。
このプロセス置換は POSIX 互換の機能では無いため、以降の例は ash 系列 (busybox hush (ash), dash 等) では利用できない。
本記事は シェルスクリプトのカレンダー | Advent Calendar 2021 - Qiita 17日目の記事だ。
殆どカレンダーが埋まってなかったので、思いついたネタで埋めちゃえ埋めちゃえ。
今回は、 bash 系列 (bash, zsh 等) の プロセス置換 (process substitution) 機能の話だ。
このプロセス置換は POSIX 互換の機能では無いため、以降の例は ash 系列 (busybox hush (ash), dash 等) では利用できない。
本記事は、 シェルスクリプト Advent Calendar 2021 の 4日目 の記事だ。
そして、 且つ docker Advent Calendar 2021 4日目 の記事でもある。
どちらのカレンダーもまだまだスッカスカなので、禁じ手で埋めにかかってしまった。
Docker 公式イメージ などをベースにして、カスタムしてイメージをビルドして使おうとした際、 なるべくなら /etc/apt/apt.conf.d/
等のように、設定用のファイルを追加して、ツール側がいい感じにマージして利用してくれるのが望ましい。
しかし、 場合によってはやむを得ず、既存のファイルを sed
コマンドなどで編集せざるを得ないこともあるだろう。
カスタムイメージの Dockerfile をビルドする際に、当初は意図通り書き換えられていても、イメージが更新された結果、イメージのリビルド時にファイルの書き換えが意図しない結果となってしまう場合がある。 1
通常、 sed
コマンドは、置換が発生してもしなくても、 終了コード 0 で終了する。
このため、書き換えの成否にかかわらず、 docker build 時にエラーにならないため、コンテナ実行時に初めて置換が意図しない結果だったことに気づくことがある。
そこで、sed
コマンドの書き換えで適切なパターンが見つからなかった場合に 0以外の終了コードを返し、ビルド時にエラーとする方法を考える。
本記事は、 シェルスクリプト Advent Calendar 2021 の 3日目 の記事だ。
3日目が終わりそうになっても誰も書きそうにないので、最近 sed
コマンドで ブロック {}
を使っていたら、 "unmatched `{" というエラーにハマったので、そのメモ。
target.txt
:
foo
bar
foo
bar
foo
insert.txt
:
***
上記のような、2つのファイルがあったとする。
target.txt
ファイルに対して、 正規表現アドレス で bar
から始まる行を選択し、 その後ろに r コマンド insert.txt
のファイルの中身を挿入する。
するとこんな結果になる。
$ sed -e '/^bar/rinsert.txt' target.txt
foo
bar
***
foo
bar
***
foo
では、アドレス指定の後ろにブロック {}
を追加し、以下のように bar が2回以上ヒットしたらエラーコード出して終了するようにしてみる。
$ sed -e '/^bar/{rinsert.txt;x;/./Q129;g}' target.txt
sed: -e expression #1, char 0: unmatched `{'
$ echo $?
1
はい、別のエラーで失敗した。
ちゃんと {
と }
の数はマッチしているのに……
何番煎じかわからないが、 Raspberry Pi (以下、 RasPi) に Ubuntu を入れる手順についてまとめてみようと思う。
Ubuntu 公式の How to install Ubuntu on your Raspberry Pi チュートリアルは充実しているし、 単にインストールして動かすだけなら、既にある記事でも十分だろうとは思う。
しかし、初回セットアップ時の細かいカスタマイズについて書かれているものがあまり見当たらず、 ディスプレイなし かつ Wi-Fi 接続のセットアップ方法などを、詳しく解説されているようなものが見つからなかった。
本記事では、それについて補足しながらまとめていく。
先に断っておくが、 cloud-init による IaC の話が中心になる。
この記事は、 Ansible AWX をインストールしたときに、 Server Error に なったりならなかったりする 問題に対処したときのポエムだ。
はじめに断っておくが、最終的に AWX 8.0.0 で解消しているっぽいものの、 原因や正確な条件などは不明なままである。
また後述するが、 (タイトルに反して)おそらく Ansible AWX の問題ではなく、 postgres:9.6 の docker イメージの問題ではないかと思われる。