Попробуем:
$ var=$(false)
$ echo $?
1
$
Однако маловероятно, что у вас установлен errexit
в вашем.bashrc, и еще менее вероятно, что следующая команда проверит код выхода вашей команды, так что очень маловероятно, что это на что-то повлияет.
Сценарии запуска, такие как.bashrc, — это то место, где вы не хотите set -o errexit
, потому что вы можете быть заблокированы из оболочки из-за простой опечатки или изменений, которые вы не контролируете. Чтобы обнаруживать, но не сбой из-за ошибок, вы можете, например, перехватывать их:
$ trap 'echo $?' ERR
$ var=$(false)
1
$
Переменные не раскрываются внутри одинарных кавычек. Вам нужно заключить его в двойные кавычки:
ff() {
find. -type f -name "$1"
}
Вы искали буквальную строку$1
Примечание. :Вы также должны указать свой аргумент командной строки, чтобы *
не расширялось до имени файла в вашем pwd
.
ff "*.so"
См.:Цитирование
Проблема в том, что вы используете одинарные кавычки вокруг '$1'
в своем определении ff
, поэтому на самом деле вы запускаете find
для поиска файла с буквальным именем $1
.
Это можно исправить, используя вместо этого двойные кавычки:
ff() {
find. -type f -name "$1"
}
У вас также есть проблема при вызове ff
, поскольку вы передаете *.so
без кавычек, который будет расширен оболочкой, если в текущем каталоге есть файл с именем *.so
.
Например, это не удастся:
mattr@kiva-mattr:~/src/protocol$ touch bogusname.so
mattr@kiva-mattr:~/src/protocol$ ff *.so
Он будет искать только bogusname.so
и не сможет найти libindystrgpostgres.so
.
Чтобы исправить это, вы должны использовать либо двойные, либо одинарные кавычки вокруг *.so
при вызове функции ff
:
mattr@kiva-mattr:~/src/protocol$ ff '*.so'
Или, также верно:
mattr@kiva-mattr:~/src/protocol$ ff "*.so"