私は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
はディレクトリを指します。
コメント
回答
スクリプトが存在するマウントポイントに「noexec」属性がある場合は、必要なものをすべてシバンしても機能しませんが、スクリプトを引数としてインタプリタを呼び出すと(その結果、noexecマウントで別のスクリプトを実行しようとはしません。
#!/bin/sh
を使用する習慣を身に付けたいと思うかもしれません。#!/bin/bash
)のbash
機能を使用していることがわかっている場合を除きます。sh
を使用する傾向があります> m bash機能を使用しない。which bash
が役立ちます。/bin/bash
が返されます。 Bashスクリプトの先頭に、#!/bin/bash
を追加します。次に、Bashスクリプトを実行するときに、bash foo.sh
と入力します。したがって、which sh
も同じように使用されます。sh foo.sh
/bin/sh
はBash以外のものであり、スクリプトに見過ごされているBashismがあるため)。 こちらをご覧ください。