sudo bash не может выполнить скрипт

Я пытаюсь запустить файл сценария оболочки, но пока не получилось в Ubuntu.

В моем терминале:

~/Desktop/FTL/data$ ls
amd64  exe_icon.bmp  FTL  licenses  resources  x86
~/Desktop/FTL/data$ sudo bash ./FTL.sh
[sudo] password for anon: 
bash: ./FTL.sh: No such file or directory
~/Desktop/FTL/data$ sh FTL.sh
sh: 0: Can't open FTL.sh
~/Desktop/FTL/data$ 
1
задан 14 October 2014 в 20:03

3 ответа

Ну, как можно понять из вывода команды ls, имя файла - FTL, а не FTL.sh. Поэтому вы должны использовать:

sudo bash ./FTL

или

 sh ./FTL

или, возможно, только:

./FTL

Также убедитесь, что файл является исполняемым, выполнив: [ 1110]

chmod +x FTL
0
ответ дан 14 October 2014 в 20:03

Первая мысль - изменить расширение на .sh. Должен быть в состоянии работать как ./FTL.sh. Во-вторых, если в верхней части файла отсутствует #!/bin/sh, он тоже не будет работать.

В-третьих, если у вас есть sudo команды, смешанные с командами, которые не требуют sudo, вы можете echo <sudo_password> | command.

В этом случае, лучшая практика (с точки зрения автоматизации / обеспечения качества) - запускать команду как ./FTL.sh <sudo_password> и записывать пароль для использования в дальнейшем в скрипте для каждой команды, которая будет запрашивать пароль sudo.

ex:

#!/bin/sh
PW=$1 #sets first parameter
...
# non-sudo commands
...
echo $PW | command`

Также неплохо добавить yes |, когда ваша команда спросит, хотите ли вы продолжить по какой-либо причине. Затем вы можете изменить вышеприведенное значение на echo $PW | yes | command

. Я также обычно собираю все выходные данные во время тестирования, что можно сделать, добавив |& tee path/to/logfile.log в конец любой команды, если вы хотите наблюдать за ее прогрессом в консоль, или переключите |& tee на &>, если он имеет длительное время работы или иным образом не хотите отслеживать прогресс.

ex:

if echo $PW | yes | command |& tee path/to/logfile.log; then 
  if sed -Fq "Validation Passed" path/to/logfile.log; then
    echo "PASS: returned 'Validation Pass'"
    else echo "FAIL: test did not return 'Validation Pass'"
  fi
  else echo "Test Failed"
fi

Просто подсказка по команде sed, -F позволяет вам указать имя файла (вместо поиска выходных данных процесса), а -q работает sed спокойно и выходит после он завершает поиск файла / процесса. Для получения дополнительной информации см. Документацию sed .

0
ответ дан 14 October 2014 в 20:03

Всегда используйте эту команду для каждого скрипта, который будет выполняться сервером.

chmod +x filename.ext
0
ответ дан 14 October 2014 в 20:03

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

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