expect のようなプログラムに汎用インタープリターを指定しますか?

expect のようなプログラムに汎用インタープリターを指定しますか?

複数のオペレーティングシステムで使用できるexpectスクリプトを書いていますが、問題は

どこでも使えるわけではない#!/usr/bin/expectので、代わりに

 #!`which expect`

トップに立ったが失敗した

[sesiv@itseelm-lx4151 ~]$ ./sendcommand
-bash: ./sendcommand: `which: bad interpreter: No such file or directory

これに対する解決策はありますか。

答え1

ほとんどの場合に機能する 1 つのトリック (perl、python、php インタープリター、およびおそらく他のインタープリターの場合):

#!/usr/bin/env expect

envは常に であると思います/usr/bin/。今では多くのインタープリタがそのように実行できます。他のハックも以前は存在していましたが、理解できなかったり、移植性があまりなかったりしました。

答え2

私は提案します

#!/bin/sh
expect_path="$(which expect)"
"$expect_path" "$0" "$@"

これがうまくいくことを願っています。bash と sh の違いについてはよくわかりません。

関連情報