dポイントプレゼントキャンペーン実施中!

シェルスクリプトのシバンを複数指定するにはどうすればいいですか?

#!/bin/sh
#!/usr/bin/expect

このように指定しても2行目のインタプリタを使ったスクリプトが動きません。
他に指定方法がありますか?

A 回答 (5件)

シバンは最初の行だけですから、同様に#から始まる2行目はコメント行になって実行されることはありません。


http://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%90% …
拝見するに「 sh を使って expect コマンドを実行したい」ようですので、単に
http://www.linux.or.jp/JM/html/expect/man1/expec …

#!/bin/sh
/usr/bin/expect

とすれば良いのでは。
    • good
    • 0

No1の方の指摘通りですね。

意味不明ですね。


このおまじないは、違うシェルの時に効果があるもので、例えばSHを指定しなくてもプロンプトで

>sh

としてから、B-Shellのスクリプトを実行すれば、ちゃんと動作します。これを

>expect (あるんだっけ?)

として実行すると、対応していない書式の所でエラーになるだけです。つまりシェル側で、このシェルで実行すると言うお約束なので、両方指定すれば、最後の物が有効になるのがスクリプトのお約束です。

たぶん、このおまじないの意味を間違った意味で使っていたようですね。

ちなみに、私なんかは、B-shellでよく作っていましたがC-Shellのやり方で書くとシンプルにかけるので、次のようにしていました。機能としては、確か、パラメーターの取得でパスの分割だったと思います。

printf "#!/bin/csh -f \n $0: ..." > a.csh
a.csh /user/abc /user/dfg

(...の所はちょっと思い出せません)

これだとCSHのスクリプトをB-Shellのスクリプトから動的に作成して、パスを切り分けて、変数に格納するものです。C-Shellだと2行で終わるが確かB-shellだとawkやsedを駆使して分割する事になり、重たくなります(c-shell起動の方が重たいだろうなって方もいましたが、100行くらい以上になると2行で済むのがシンプルでよいと感じるはず)

No1の方が指摘していますが、eval やexecなどで呼び出す方法もあるかと

nawk, awkでも可能です。
    • good
    • 0

もし、できたとして、shで処理する部分とexpectで処理する部分はどうやって分けるのでしょう?


例えば、 for という文字列があったとすると、 sh にもexpectにもfor文があります。どちらのforとして解釈するのですか?

なにがしたいのかわかりませんが、shスクリプトの中でexectコマンドを実行、というやりかたではダメなのですか?
    • good
    • 0

どうやっても出来ません

    • good
    • 0

何をしたいのでしょうか?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!