Представьте себе сценарий, в котором есть стандартные сценарии bash linux (работающие на SUSE linux). Примерно так:
#!/bin/bash
#version=1.0
#Some other text
command
#-------Comment
Changeversion=2.0
...
...
Есть ли способ автоматически обрабатывать ошибки или, по крайней мере, написать собственное сообщение? Например, я попытаюсь запустить сценарий, но он говорит:
-bash: ./filename.sh: Keine Berechtigung
Итак, мне нужно добавить права к файлу - есть ли способ, как автоматически добавить права к этому файлу при попытке его запустить или хотя бы добавить «настраиваемое сообщение» "like" do chmod + x filename.sh "?
Или, если у меня другая кодировка:
/bin/bash^M: bad interpreter:
Может ли сам сценарий запустить эту команду:
sed -i -e 's/\r$//' filename.sh
Или хотя бы сказать это в сообщении об ошибке?
Я воспроизвел вашу проблему:
# cat /tmp/tmp
#!/bin/bash
echo SCRIPT BASH EXECUTED
# file /tmp/tmp
/tmp/tmp: Bourne-Again shell script, ASCII text executable, with CRLF line terminators
# /tmp/tmp
-bash: /tmp/tmp: /bin/bash^M: bad interpreter: No such file or directory
Следующая команда решает проблему для сеанса bash, в котором выполняется команда:
# trap 'file $BASH_COMMAND |grep -qs "Bourne-Again shell script, ASCII text executable, with CRLF line terminators" && sed -i -e "s/\r$//" $(echo $BASH_COMMAND|cut -d" " -f1) && echo "DOS FORMAT BASH SCRIPT, SED EXECUTED" && $BASH_COMMAND' ERR
# /tmp/tmp testArgument1 testArgument2
-bash: /tmp/tmp: /bin/bash^M: bad interpreter: No such file or directory
DOS FORMAT BASH SCRIPT, SED EXECUTED
SCRIPT BASH EXECUTED
# /tmp/tmp testArgument1 testArgument2
SCRIPT BASH EXECUTED
Командная ловушка действительна только для вашего текущего сеанса, поместите ее в / etc / profile /etc/profile.d или другой аналогичный файл конфигурации, чтобы сделать его постоянным для всех сеансов bash.
Я тестировал его только с bash-4.2.46-19.el7.x86_64 в системе RHEL 7
Вопрос был отклонен, но никто не объяснил, почему (позор вам, те, кто проголосовал против!) Итак, я объясню, почему я собираюсь проголосовать против (да, это должен быть комментарий, но это немного слишком большой).
Хотя это может показаться несущественными препятствиями на пути к запуску кода, они существуют по уважительной причине. Запуск кода на компьютере опасен по своей сути. Очевидно, что компьютеры бесполезны, если они не запускают код, но важно, чтобы они запускали правильный код. Внедрение автоматического исправления типичных ошибок имеет два больших эффекта:
Кроме того, иногда ошибка не такая, как кажется - у вас могут быть разрешения файловой системы для доступа к сценарию, но она может быть в смонтированной файловой системе noexec
, или доступ может быть заблокированным SELinux. Или Apparmour. Или GRSecurity.
Одно конкретное сообщение об ошибке не соответствует одному конкретному разрешению.