Я пробовал все виды способов перенаправляют как stdout
и stderr
в /dev/null
без какого - либо успеха. У меня почти всю жизнь работает bash, с которым у меня никогда не было этой проблемы, но на этот раз в BSD я застрял /bin/sh
.
Что я пробовал:
if ls ./python* 2> /dev/null; then
echo found Python
fi
... который работает; если Python отсутствует, он отключит сообщения об ошибках от ls. Однако, если python.tgz
присутствует, выводится строка с, которая выглядит так:
# ./test.sh
./python-2.7.3p1.tgz
Я пробовал:
if ls ./python* &> /dev/null; then
echo found Python
fi
а также
if ls ./python* 2>1 > /dev/null; then
echo found Python
fi
а также
if ls ./python* > /dev/null; then
echo found Python
fi
Ничего действительно не работает. Я могу перенаправить только один из выходов, а не оба одновременно.
источник
/bin/sh
реализован&>/dev/null
синтаксис, по-видимому, нет, или у меня более старая версия (которую я никак не могуsh
основан на pdksh. Там нет больше оболочки Борна в настоящее время.csh
введены>&
также доступны вzsh
.bash
выбрано&>
(теперь также поддерживаетсяzsh
и некоторымиpdksh
производными), хотя оно явно нарушает соответствие POSIX, так какfoo &> file
это совершенно правильный синтаксис POSIX, который означает нечто совершенно иное.foo &> file
это какfoo & > file
илиfoo & : > file
, то есть запускает foo в фоновом режиме и открывает файл для записи без какой-либо команды (вряд ли будет использоваться таким образом).>&
не является идеальным или как это противоречит>&2
,>&-
операторам.zsh
добавил это для удобства пользователей csh (csh не имеет>&2
). Они просто синтаксический сахар, просто использование,> file 2>&1
которое является стандартным и переносимым (для оболочек типа Борна).