Ошибки Bash
stderr | |
!#/bin/bash: not found | |
VAR: command not found | |
Похожие статьи |
stderr
Ошибки выводятся в терминал не так как обычные сообщения.
Обычные сообщения это stdout порядковый номер 1
Ошибки это stderr порядковый номер 2
Рассмотрим пример сообщения об ошибке.
Для этого выполним листинг несуществующей директории
ls /etcw
ls: cannot access '/etcw': No such file or directory
Попытка перенаправить ошибку в файл с помощью > ни к чем не приведет
ls /etcw > err
zsh: file exists: err
Причина в том, что > это эквивалент 1> а нам нужно 2>
ls /etcw 1> err
cat err
ls: cannot access '/etcw': No such file or directory
Часто сообщения об ошибках идут вперемешку с обычными.
Например, нужно выполнить поиск в директории где часть поддиректорий недоступны по причине
нехватки прав.
find /etc -type l
/etc/mtab find: ‘/etc/grub.d’: Permission denied /etc/pki/ca-trust/source/ca-bundle.legacy.crt /etc/pki/java/cacerts /etc/pki/tls/cert.pem /etc/pki/tls/certs/ca-bundle.crt /etc/pki/tls/certs/ca-bundle.trust.crt find: ‘/etc/pki/CA/private’: Permission denied find: ‘/etc/pki/Pegasus’: Permission denied find: ‘/etc/pki/rsyslog’: Permission denied …
Чтобы не отвлекаться на ошибки их можно перенаправить в /dev/null
find /etc -type l 2> /dev/null
/etc/mtab /etc/pki/ca-trust/source/ca-bundle.legacy.crt /etc/pki/java/cacerts /etc/pki/tls/cert.pem /etc/pki/tls/certs/ca-bundle.crt /etc/pki/tls/certs/ca-bundle.trust.crt /etc/systemd/system/multi-user.target.wants/remote-fs.target /etc/systemd/system/multi-user.target.wants/crond.service /etc/systemd/system/multi-user.target.wants/rhel-configure.service /etc/systemd/system/multi-user.target.wants/libstoragemgmt.service …
Если нужно перенаправить и ошибки и стандартный вывод выполните:
find /etc -type l &> everything.log
1: !#/bin/bash: not found
Ошибка
1: !#/bin/bash: not found
Возникает если перепутать местами ! и # в первой строке скрипта
Правильно писать
#!/bin/bash
VAR: command not found
Ошибка
VAR: command not found
Возникает если перепутать при присвоении значения переменной поставить пробел у знака равенства
Правильно писать
VAR='https://urn.su'
Неправильно писать
VAR = 'https://urn.su'
Вокруг = не должно быть пробелов.