Ошибки 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'

Вокруг = не должно быть пробелов.