foo.sh
現在のディレクトリにファイルがあります。実行しようとすると、次の結果./foo.sh
が表示されます。
-bash: ./foo.sh: /bin/sh: bad interpreter: Permission denied
しかし、実行してみると/bin/sh ./foo.sh
大丈夫です。
./foo.sh
実行でき、自動的に/ bin / shを使用して実行できるように、この問題をどのように修正しますか?
編集:いいです。これはChrome OSであり、この特定のフォルダはnoexec
。./foo.sh
なぜ?なぜsh foo.sh
走っても同じ目標を達成できますか?では、noexec
どんな安定感をもたらしますか?
答え1
このnoexec
フラグは「予想される」動作なので、スクリプトに適切に適用されます。
しかし、これらの設定は、noexec
自分がしていることについて十分に知らない人を妨げるだけです。実行するとsh foo.sh
、実際には使用されなくなったデフォルトのsh
場所(おそらく)で実行されます。/bin
noexec
noexec
直接電話して通常のバイナリを取得することもできますld
。
cp /bin/bash $HOME
/lib/ld-2.7.so $HOME/bash
を使用して場所が見つかったかどうかにかかわらず、bashを実行しますnoexec
。
答え2
MS-DOS 2 バイト (キャリッジ リターンとライン フィード) 行末のファイルを実行しようとすると、このエラー (または非常に似たメッセージ) が表示されることがあります。
最近、Vimはキャリッジリターンを必ず「^ M」とマークしないほどスマートです。したがって、Vimが考える「ファイル形式」が何であるかを確認せずに画面に表示される方法にのみ依存している場合は、だまされます。
この場合、「#!/bin/sh^M」のため、カーネルは「/bin/sh^M」を検索しようとしますが、見つかりません。まさに都合のない翻訳だ。
答え3
USBスティック(またはその他のリムーバブルメディア)でスクリプトまたはプログラムを実行するオプションがある場合は、手動でアンインストールして再インストールしてみてください。
USBフラッシュドライブの挿入
USBスティックデバイスを探す
$ mount
それを記録しなさい。
/dev/sdb1
USBフラッシュドライブの取り外し:
$ cd /media/removable $ sudo umount mountpoint
最後に、USBドライブを再インストールします。
$ sudo mount /dev/sdb1 mountpoint
USBスティックのマウントポイント名を使用してください。
答え4
私も同じ問題があります。私の問題はSDカードにあります。これは私にとって有用であり、ここの他の答えよりはるかに簡単です。私はそこで学んだ。クルトン質問 #928。
$ sudo mount -o remount,exec /media/removable/SD\ Card
デバイス(/dev/mmcblk1p1)ではなくマウントポイントを使用する必要があります。あなたの場合、USB(/dev/sdb1)も同様です。マウントポイントのみが異なります。
$ sudo mount -o remount,exec /media/removable/USB\ Drive
クエリを実行すると、マウントオプションから「noexec」が消えてしまい、目的の効果があることがわかります。