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
открываем
лексический
дескриптор файла $fh
для файла input.txt. Причина, по которой он должен быть лексическим, заключается в том, что он закрывается сам по себе, когда считывается следующая строка ввода из foobar.txt. $a
, когда видим % Строка BEGIN
в файле input.txt. И через 1 строчку после этого заменяем строчку в input.txt на строчку из foobar.txt. 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 --
bash
поддерживает это, но вы явно указываете, что ваша текущая оболочка не bash
, а скорее sh
, которая является другой оболочкой.
Правильный синтаксис будет :
sudo my_script.sh some_arg > /dev/null 2>&1
bash
поддерживает >&
, однако /bin/sh
не поддерживает (, по крайней мере, не для перенаправления в файл ).
Ваша командная строка интерпретируется/bin/sh
до того, как передается в sudo
и bash
.
Я не могу проверить это на bash
(, но это работает с другими оболочками)-вы можете попробовать использовать опцию -c
со строкой в кавычках:
sudo bash -c "my_script.sh some_arg >& /dev/null"