Bashスクリプトのアクセスが拒否されました&不正なインタープリター

私はkalilinux64ビットを使用しています。

開始するのに2つの引数を取るpythonスクリプトを作成しました。まったく同じパスを入力したり、ターミナルで使用したコマンドの履歴を検索したりするたびに入力したくありません。そこで、引数を指定してpythonスクリプトを呼び出す簡単なスクリプトを作成することにしました。

#! /bin bash python CreateDB.py ./WtfPath ./NoWtfPath/NewSystem/ 

これは、ターミナルで使用するのとまったく同じコマンドです。ただし、スクリプトファイルを実行しようとすると、エラーメッセージが表示されます。

bash: ./wtf.sh: /bin: bad interpreter: Permission denied 

wtf.shには実行可能権限があります。

何が問題なのですか?

回答

ここではスラッシュの代わりにスペースがあります:

 #! /bin bash  

次のようになります:

 #! /bin/bash  

または単に

 #!/bin/bash  

(最初のスペースはオプションです)。シェバン(#!)の後には、実行可能ファイルへのパス が続く必要があり、その後にが続く場合があります。 1つの引数、例:

 #!/usr/bin/env sh  

この場合は/usr/bin/envは実行可能ファイルです。詳細については、man envを参照してください。

/binはディレクトリを指します。

コメント

  • くそー、ばかげて!ありがとう! 'わかりませんでした…
  • (代わりに#!/bin/shを使用する習慣を身に付けたいと思うかもしれません。 #!/bin/bash)のbash機能を使用していることがわかっている場合を除きます。
  • @ G-Manこれをクリーニングしていただきありがとうございます少しアップ。 WRT bash vs. sh、私は質問のパターンに従っていました(ただし、'shを使用する傾向があります> m bash機能を使用しない
  • Ubuntuターミナルでは、which bashが役立ちます。 /bin/bashが返されます。 Bashスクリプトの先頭に、#!/bin/bashを追加します。次に、Bashスクリプトを実行するときに、bash foo.shと入力します。したがって、which shも同じように使用されます。 sh foo.sh
  • @ G-Man、仕事の世界では、残念ながら多くの人が' t Bash機能を使用しているかどうかを知っている。多くの場合、'実行して実行するよりも、スクリプトをまったく実行しない(Bashはシバンで指定されているが欠落しているため)方が望ましいです。予期しない何か(/bin/shはBash以外のものであり、スクリプトに見過ごされているBashismがあるため)。 こちらをご覧ください。

回答

スクリプトが存在するマウントポイントに「noexec」属性がある場合は、必要なものをすべてシバンしても機能しませんが、スクリプトを引数としてインタプリタを呼び出すと(その結果、noexecマウントで別のスクリプトを実行しようとはしません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です