Пока я играл в моей оболочке, расследуя ответ на этот вопрос, я заметил, что, хотя /bin/sh
указывал на /bin/bash
в моей системе, две команды ведут себя по-разному. Прежде всего, вывод
ls -lh /bin/sh
является:
lrwxrwxrwx 1 root root 4 Apr 22 2013 /bin/sh -> bash*
Однако, вызывая следующую команду через /bin/sh
:
/bin/sh -c "script.sh 2> >( grep -v FILTER 2>&1 )"
возвращает эту ошибку:
/bin/sh: -c: line 0: syntax error near unexpected token '>'
/bin/sh: -c: line 0: 'script.sh 2> >( grep -v FILTER 2>&1 )'
Выполняя ту же команду через /bin/bash
:
/bin/bash -c "script.sh 2> >( grep -v FILTER 2>&1 )"
выполняется успешно, вот результат:
This should be on stderr
Для справки, вот содержание script.sh
:
#!/bin/sh
echo "FILTER: This should be filtered out" 1>&2
echo "This should be on stderr" 1>&2
echo "FILTER: This should be filtered out" 1>&2
Почему две вызовы ведут себя по-другому?