Я пытаюсь запустить файл сценария оболочки, но пока не получилось в 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$
Ну, как можно понять из вывода команды ls
, имя файла - FTL
, а не FTL.sh
. Поэтому вы должны использовать:
sudo bash ./FTL
или
sh ./FTL
или, возможно, только:
./FTL
Также убедитесь, что файл является исполняемым, выполнив: [ 1110]
chmod +x FTL
Первая мысль - изменить расширение на .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 .
Всегда используйте эту команду для каждого скрипта, который будет выполняться сервером.
chmod +x filename.ext