• 締切済み

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

シェルスクリプトのシバンを複数指定するにはどうすればいいですか? #!/bin/sh #!/usr/bin/expect このように指定しても2行目のインタプリタを使ったスクリプトが動きません。 他に指定方法がありますか?

みんなの回答

回答No.5

シバンは最初の行だけですから、同様に#から始まる2行目はコメント行になって実行されることはありません。 http://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%90%E3%83%B3_(Unix) 拝見するに「 sh を使って expect コマンドを実行したい」ようですので、単に http://www.linux.or.jp/JM/html/expect/man1/expect.1.html #!/bin/sh /usr/bin/expect とすれば良いのでは。

すると、全ての回答が全文表示されます。
  • 0909union
  • ベストアンサー率39% (325/818)
回答No.4

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でも可能です。

すると、全ての回答が全文表示されます。
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

もし、できたとして、shで処理する部分とexpectで処理する部分はどうやって分けるのでしょう? 例えば、 for という文字列があったとすると、 sh にもexpectにもfor文があります。どちらのforとして解釈するのですか? なにがしたいのかわかりませんが、shスクリプトの中でexectコマンドを実行、というやりかたではダメなのですか?

すると、全ての回答が全文表示されます。
  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

どうやっても出来ません

すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

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

すると、全ての回答が全文表示されます。

関連するQ&A