Ответ 1
Я хотел бы добавить, что это излишне подробный и может быть сокращен до
if "[email protected]" &>/dev/null
then
echo "Valid command"
fi
или даже короче
"[email protected]" &>/dev/null && echo "Valid command"
Может кто-нибудь объяснить, что означает этот бит кода?
Я считаю, что вторая строка - "если статус выхода равен нулю", тогда эхо "действительная команда", но я не понимаю первую строку
[email protected] &>/dev/null
if [[ $? = 0 ]]
then
echo "Valid command"
fi
Я хотел бы добавить, что это излишне подробный и может быть сокращен до
if "[email protected]" &>/dev/null
then
echo "Valid command"
fi
или даже короче
"[email protected]" &>/dev/null && echo "Valid command"
Первая строка запускает команду, образованную простым использованием всех аргументов в script и перенаправлением вывода в /dev/null, который по существу отбрасывает его.
Встроенная переменная [email protected] расширяется до всех позиционных параметров, причем каждый параметр представляет собой строку с кавычками, то есть параметры переданы без изменений, без интерпретации или расширения. Чтобы получить этот эффект, я считаю, что вам нужно указать использование переменной, т.е. "[email protected]"
.
Оператор &>
перенаправляет как stdout, так и stderr.
В соответствии с manual, [email protected]
расширяется до позиционных параметров, начиная с одного. Если вы назовете это script как scripty.sh ls /
, он выполнит ls /
, перенаправляя весь вывод в ведро бит. Это должно вернуть успех (надеюсь!), И, таким образом, script напечатает Valid command
. Если вы вызываете его scripty.sh ls /some/nonexistent/directory
, тогда команда ls
должна завершиться неудачно, а script ничего не выведет.
На самом деле, я думаю, что script можно улучшить, добавив двойные кавычки вокруг [email protected]
, чтобы аргументы с пробелами в них не прерывали интерпретатор.
С [email protected]
команда ls "/Library/Application Support"
расширена до трех слов. С "[email protected]"
он расширился до двух, и команда запускается так же, как и без script обертывания.