Невозможно перенаправить вывод ввода-вывода в FreeBsd

perl -nMFatal=open -e '$l = $_;
   @ARGV and open my $fh, "<", $ARGV[0];
   print +(/^%\hBEGIN/ ? $a=0 : $a++) == 1 ? $l : $_ while <$fh>;
' foobar.txt input.txt

Рабочий
  • Для каждой строки, прочитанной из файла foobar.txt, мы открываем лексический дескриптор файла $fh для файла input.txt. Причина, по которой он должен быть лексическим, заключается в том, что он закрывается сам по себе, когда считывается следующая строка ввода из foobar.txt.
  • Мы инициализируем счетчик $a, когда видим % Строка BEGIN в файле input.txt. И через 1 строчку после этого заменяем строчку в input.txt на строчку из foobar.txt.
  • Порядок аргументов следующий: foobar.txt и затем input.txt.
  • Мы включили прагму Fatal.pm, которая автоматически обрабатывает ошибки при открытии файлов.
Результаты
some text --
% BEGIN
blabla
2 3
blabla
blabla
% END
some text --
some text --
% BEGIN
blabla
8 9
blabla
blabla
% END
some text --
some text --
% BEGIN
blabla
1 2
blabla
blabla
% END
some text --
0
13.06.2017, 18:18
3 ответа

bash поддерживает это, но вы явно указываете, что ваша текущая оболочка не bash, а скорее sh, которая является другой оболочкой.

5
28.01.2020, 02:13

Правильный синтаксис будет :

sudo my_script.sh some_arg > /dev/null 2>&1
1
28.01.2020, 02:13

bashподдерживает >&, однако /bin/shне поддерживает (, по крайней мере, не для перенаправления в файл ).

Ваша командная строка интерпретируется/bin/shдо того, как передается в sudoи bash.

Я не могу проверить это на bash(, но это работает с другими оболочками)-вы можете попробовать использовать опцию -cсо строкой в ​​кавычках:

sudo bash -c "my_script.sh some_arg >& /dev/null"
3
28.01.2020, 02:13

Теги

Похожие вопросы