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 , дает noexec ?

  • Как я могу исправить размеры значков диалогового окна Chrome / Chromium в HiDPI?
  • Интерфейс Vim в полях ввода веб-браузера?
  • Google Chrome Repo (стабильный Debian)
  • После перезапуска Chromium шрифты искажены
  • Как запустить chrome из окна терминала после deb isntallation?
  • Обновления Google Chrome после 32-битного прекращения
  • Chromium не отображает Flash в Debian Wheezy
  • Все мои расширения Chromium скрыты за одним раскрывающимся списком
  • 4 Solutions collect form web for “Bash не будет выполнять файлы”

    Флаг 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.

    В наши дни Вим настолько умен, что не обязательно показывает, что каретка возвращается как «^ М». Поэтому вы можете одурачить, если не проверите, что Vim считает «формат файла» и просто полагается на внешний вид экрана.

    В этом случае «#! / Bin / sh ^ M» заставляет ядро ​​попытаться найти «/ bin / sh ^ M», чего не может. Плохой переводчик, действительно.

    Если у вас есть возможность запускать скрипт или программу с USB-накопителя (или другого съемного носителя), вы можете попробовать размонтировать и вручную повторно установить его:

    1. Подключите USB-накопитель

    2. Найти устройство USB-накопителей с $ mount

    3. Обратите внимание на это; предположим, что это /dev/sdb1

    4. Отключить USB-накопитель:

       $ cd /media/removable $ sudo umount mountpoint 

    Наконец, снова смонтируйте USB-накопитель:

     $ sudo mount /dev/sdb1 mountpoint 

    С помощью точки монтирования имя крепления USB-накопителя

    У меня такой же вопрос. Моя проблема была в SD-карте. Это сработало для меня, и это намного проще, чем другие ответы здесь. Я узнал об этом от проблемы № 868 от Crouton .

     $ sudo mount -o remount,exec /media/removable/SD\ Card 

    Обратите внимание, что вы должны использовать точку монтирования, а не устройство (/ dev / mmcblk1p1). То же самое для USB (/ dev / sdb1) в вашем случае. Только точка монтирования отличается:

     $ sudo mount -o remount,exec /media/removable/USB\ Drive 

    Вы узнаете, что он имел желаемый эффект, потому что «noexec» исчезнет из параметров mount при запросе.

    Linux и Unix - лучшая ОС в мире.