sudo:./abc.sh: команда, не найденная

Команды ввели в терминале:

chmod 777 abc.sh
sudo ./abc.sh

Каждая программная оболочка дает ту же ошибку:

.sh: command not found

Включая это простое abc.sh программа:

#!/bin/bash
# My first script
echo "Hello World!"

Вывод sudo od -c ./abc.sh:

0000000 # ! / b i n / b a s h \n # M y
0000020 f i r s t s c r i p t \n \n e
0000040 c h o " H e l l o W o r l d
0000060 ! " \n \n
0000064

screenshot of terminal and abc.sh path(1)

screenshot of terminal and abc.sh path(2)

3
задан 25 January 2016 в 21:42

3 ответа

Исследуйте вывод этого (из каталога, где abc.sh находится):

$ type ./abc.sh
$ ./abc.sh

type команда сначала проверит, что Ваш./abc.sh найден. Если это не будет это, то выйдет из высказывания, что это не может найти ./abc.sh файл. Затем мы должны были бы узнать то, что это об имени файла, которым это не может быть найдено.

Кроме того, что является именем редактора, которого Вы используете для создания файла сценария. При непреднамеренном использовании редактирования Windows (через вино), это может вызвать проблемы с разделителями строки в сценарии.

Попытайтесь использовать и редактирование такой как nano или gedit. Вы могли бы использовать одного из тех рекомендуемых редакторов и создать тот же файл в качестве примера как, abc1.sh и удостоверьтесь, чтобы у Вас были строки точно, как они находятся в Вашем отредактированном вопросе.


Между прочим, единственный способ, которым я могу воспроизвести сообщение об ошибке, что Вы дали в своем вопросе, путем игнорирования abc часть abc.sh файл.

Эти команды произведут ошибку Вашего сообщения:

$ ./.sh
$ sudo .sh

Следует иметь в виду, что каждая ошибка уникальна и важна в диагностировании проблемы. Важно протестировать и потребовать сценарий и дать точное сообщение об ошибке.

Например, a permission denied ошибка могла быть вызвана путем попытки выполнить файл, который не имеет набора битов выполнения. Это может быть установлено путем выполнения команды, на которую Вы ссылаетесь в своем вопросе:

$ chmod 777 abc.sh

Вы могли также добраться permission denied ошибка путем попытки выполнить файл это, которое принадлежит root и не имеет мира или набора битов группы для чтения. Это может быть побочным эффектом использования sudo в Вашем личном пространстве, когда это не необходимо. chmod 777 то, что Вы упомянули в своем вопросе, также разрешит что проблема путем предоставления разрешения чтения и выполнения всем пользователям.

При создании файла в таким образом, что он принадлежит корню, необходимо будет использовать поднятую команду для изменения свойств. Это предоставит Вам доступ для выполнения файла:

$ sudo chmod 777 abc.sh

Если у Вас есть причина управлять, кто может выполнить или получить доступ к сценарию, Вы могли бы смотреть на некоторые из других опций chmod:

$ man chmod

Как предложено в комментариях к Вашему вопросу, Вы не должны использовать поднятую команду sudo запускать скрипты, которые Вы тестируете. Если тестирование находится в Вашем личном пространстве, можно заставить области личного пространства становиться принадлежавшими корню... теряющему персональный доступ к тем областям. Некоторые плохие сформированные сценарии могли также вызвать повреждение к другим системным файлам нашей ОС. Ввод с опечатками Вашей попытки работать abc.sh сценарий является примером, что ошибки могут произойти. Если бы Вы решили удалить свой рабочий каталог сценария или сценария и по ошибке имели пространство в неправильном месте, то он мог вызвать серьезные проблемы, где Вы меньше всего ожидаете.

1
ответ дан 1 December 2019 в 15:55

Ну, от того, что Вы сказали нам, это должно работать отлично... Это - то, если раздел это хранится на поддержках unix/posix полномочия стиля. Я сталкиваюсь с этой ошибкой все время, если я пытаюсь запустить скрипт от vfat или ntfs раздела. Рассмотрение это смонтировано в месте, названном работой, является этим на Карте памяти с жиром, или ntfs отформатировал раздел? Если это, необходимо снабдить префиксом оболочку перед сценарием. Проверьте раздел, и это могло бы быть проблемой. Переместите его в свой корневой каталог, и это могло бы работать легко в файловой системе, которая поддерживает unix/posix полномочия.

Проверка, если это так:

mount |grep nisheet

Делает, говорят vfat, fuseblock или ntfs? Раз так...

Две опции:

  1. Снабжают префиксом оболочку перед сценарием для выполнения:

bash abc.sh

  1. Перемещение это к файловой системе, которая поддерживает полномочия Unix/Posix:

Исключая:

mv abc.sh ~/
cd ~
chmod +x abc.sh
./abc.sh
3
ответ дан 1 December 2019 в 15:55

Если скрипт находится в каталоге, в котором вы сейчас находитесь, вы должны использовать:

. abc.sh

вместо:

./abc.sh

при условии, что у вашего пользователя есть разрешения.

-1
ответ дан 8 December 2020 в 17:15

Другие вопросы по тегам:

Похожие вопросы: