Как бороться с ошибками bash при попытке его запустить?

Представьте себе сценарий, в котором есть стандартные сценарии 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

Или хотя бы сказать это в сообщении об ошибке?

-3
задан 26 July 2016 в 14:12
2 ответа

Я воспроизвел вашу проблему:

# 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

4
ответ дан 5 December 2019 в 21:51

Вопрос был отклонен, но никто не объяснил, почему (позор вам, те, кто проголосовал против!) Итак, я объясню, почему я собираюсь проголосовать против (да, это должен быть комментарий, но это немного слишком большой).

Хотя это может показаться несущественными препятствиями на пути к запуску кода, они существуют по уважительной причине. Запуск кода на компьютере опасен по своей сути. Очевидно, что компьютеры бесполезны, если они не запускают код, но важно, чтобы они запускали правильный код. Внедрение автоматического исправления типичных ошибок имеет два больших эффекта:

  • это значительно упрощает выполнение кода кем-то, атакующим ваш компьютер,
  • иногда люди ошибочно вводят команды - возможно, ваша волшебная система исправления скриптов исправит и выполнить неправильный код

Кроме того, иногда ошибка не такая, как кажется - у вас могут быть разрешения файловой системы для доступа к сценарию, но она может быть в смонтированной файловой системе noexec , или доступ может быть заблокированным SELinux. Или Apparmour. Или GRSecurity.

Одно конкретное сообщение об ошибке не соответствует одному конкретному разрешению.

0
ответ дан 5 December 2019 в 21:51

Теги

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