shebang はシェル以外の実行可能ファイルも指定できるメモ。
shebang はシェル以外の実行可能ファイルを指定できるのを知ったので書いておく。
shebang はシェル以外の実行可能ファイルも指定できる
自分はなんとなく shebang はシェルスクリプトにしか書いてこなかったけど、shebang はスクリプトを読み込むインタプリタを指定するものなので普通にシェル以外の実行可能ファイルを指定することができる。
ちなみに shebang はシェルスクリプトの先頭行に書くやつ。こういうの。
#!/bin/bash
sed スクリプトファイルの shebang
当たり前だけど sed のスクリプトファイルは shebang を書くことができる。
例として入力の先頭行と最終行を削除する sed のスクリプトを作って実行してみる。
入力の先頭行と最終行を削除する sed のスクリプトを delete-first-and-last-lines.sed
という名前で保存と実行権限を付けておくと、普通に実行可能ファイルみたいにして実行できる。
$ cat ./delete-first-and-last-lines.sed #!/usr/bin/env sed -f 1d $d $ seq 1 5 | ./delete-first-and-last-lines.sed 2 3 4
shebang を書いている sed のスクリプトファイルは普通に -f
オプションで指定することもできる。
$ seq 1 5 | sed -f ./delete-first-and-last-lines.sed 2 3 4
awk スクリプトファイルの shebang
当たり前だけど awk のスクリプトファイルも shebang を書くことができる。
例として入力の自乗を表示するスクリプトを作って実行してみる。
入力の自乗を表示する awk のスクリプトを pow.awk
という名前で保存と実行権限を付けておくと、普通に実行可能ファイルみたいにして実行できる。
$ cat ./pow.awk #!/usr/bin/env awk -f {printf("%d\n", $0*$0)} $ seq 1 5 | ./pow.awk 1 4 9 16 25
shebang を書いている awk のスクリプトファイルは普通に -f
オプションで指定することもできる。
$ seq 1 5 | awk -f ./pow.awk 1 4 9 16 25
shebang に書くパス
shebang は #!/usr/bin/env sed -f
にしてるけど #!/usr/bin/sed -f
みたいに自分の環境での sed のパスをベタで書いてもちゃんと動く。
こういう書き方は可搬性は下がっちゃうけど、自分は sed とか awk のスクリプトファイルを普段自分が作業している環境以外に持っていって動かすことはほとんどないので、こういう書き方でもいいかなーって思ってる。