Bashスクリプトのアクセス許可が拒否されました&悪い通訳


8

私はkali linux 64ビットを使用しています。

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

#! /bin bash

python CreateDB.py ./WtfPath ./NoWtfPath/NewSystem/

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

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

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

なにが問題ですか?

回答:


10

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

#! /bin bash

する必要があります:

#! /bin/bash

または単に

#!/bin/bash

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

#!/usr/bin/env sh

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

/binディレクトリを参照するだけです。


いまいましい、ばかげた私!ありがとう!それを見なかった...
ダヴログ

1
機能を使用していることを知らない限り#!/bin/sh、(の代わりに#!/bin/bash)を使用する習慣を身に付けたいと思うかもしれませんbash
G-Manは 'Reinstate Monica'を

@ G-Manこれを少し片付けてくれてありがとう。WRT bash対sh、私は質問のパターンに従っていただけです(私の傾向は、bash機能を使用しshいないことがわかっている場合にのみ使用する傾向があります)。
goldilocks 2015

Ubuntuターミナルでwhich bashは、参考になります。それが戻る/bin/bash。私のBashスクリプトの先頭に追加し#!/bin/bashます。次に、Bashスクリプトを実行するときに、と入力しbash foo.shます。だから、which sh同じように使用されています。sh foo.sh
noobninja

1
@ G-Manさん、仕事の世界では、Bash機能を使用しているかどうかを知らない人がたくさんいます。多くの場合、スクリプトをまったく実行せずに(Bashがシバンで指定されているが欠落しているため)、実行するよりも予期しない何かを実行することをお/bin/sh勧めします(Bash以外のものであり、スクリプトに気付かれないBashismがあるため)。 こちらをご覧ください。
ワイルドカード2016年

1

スクリプトが存在するマウントポイントに「noexec」属性がある場合、必要なすべてをシバンでき、それでも機能しないことに注意してください。ただし、引数としてスクリプトを使用してインタープリターを呼び出すと、これは、noexecマウントで別のスクリプトを実行しようとはしません)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.