Проблема с ответами vladr состоит в том, что система не будет захватывать вывод в STDOUT из команды (которую вы обычно хотели бы), а также не позволяет выполнять более одной команды (учитывая использование shift вместо доступ к полному содержанию @_).
Что-то вроде следующего может быть более подходящим для этой проблемы:
my @cmd = ( 'diff <(ls -l) <(ls -al)', 'grep fu' );
my @stdout = exec_cmd( @cmd );
print join( "\n", @stdout );
sub exec_cmd
{
my $cmd_str = join( ' | ', @_ );
my @result = qx( bash -c '$cmd_str' );
die "Failed to exec $cmd_str: $!" unless( $? == 0 && @result );
return @result;
}
К сожалению, это не помешает вам вызывать / bin / sh только для запуска bash, однако я не вижу обходного пути для этой проблемы.