LoginSignup
9
10

More than 5 years have passed since last update.

シェルスクリプトを Shebang に書く

Posted at

普通にはシェルスクリプトを Shebang (シェバング? シバン?)に書くことはできません。

/tmp/a.sh
#!/bin/bash
echo "my name is a"
echo "args is $@"
/tmp/b.sh
#!/tmp/a.sh
echo "my name is b"
echo "args is $@"

b.sh の Shebang に /tmp/a.sh と書いているので a.sh が実行されることを期待していますが、実際には b.sh が /bin/bash で実行されます。

$ chmod +x a.sh b.sh

$ /tmp/b.sh 1 2 3
my name is b
args is 1 2 3

b.sh の Shebang を /usr/bin/env /tmp/a.sh などとしてやればOKです。

/tmp/b.sh
#!/usr/bin/env /tmp/a.sh
echo "my name is b"
echo "args is $@"
$ chmod +x a.sh b.sh

$ /tmp/b.sh 1 2 3
my name is a
args is /tmp/b.sh 1 2 3

最近よく見る /usr/bin/env ruby のような記述は単にインタプリタのインストール先が PATH さえ通っていればどこでも良いようにするためのものかと思っていましたが、こういう効果もあるんですね。

9
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10