Chrome OSでは、Bashは私のスクリプトを実行しません。 Bashでスクリプトを実行するにはどうすればよいですか?

Chrome OSでは、Bashは私のスクリプトを実行しません。 Bashでスクリプトを実行するにはどうすればよいですか?

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場所(おそらく)で実行されます。/binnoexec

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スティック(またはその他のリムーバブルメディア)でスクリプトまたはプログラムを実行するオプションがある場合は、手動でアンインストールして再インストールしてみてください。

  1. USBフラッシュドライブの挿入

  2. USBスティックデバイスを探す$ mount

  3. それを記録しなさい。/dev/sdb1

  4. 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」が消えてしまい、目的の効果があることがわかります。

関連情報