sh: 1: Syntax error: redirection unexpected when using backticks perl
sh: 1: Syntax error: redirection unexpected when using backticks perl
my $mysql_cmd = 'debconf-set-selections <<< \'mysql-server mysql-server/root_password password 6ygr\' ;debconf-set-selections <<< \'mysql-server mysql-server/root_password_again password 6ygr\'; '.our $install_cmd." mysql-server";
my $mysql_stat = `$mysql_cmd`;
我正在使用上面的代码从我的 perl 脚本安装 mysql。但是我收到了这个错误
sh: 1: Syntax error: redirection unexpected
当我打印 $mysql_cmd
我得到 debconf-set-selections <<< 'mysql-server mysql-server/root_password password 6ygr' ;debconf-set-selections <<< 'mysql-server mysql-server/root_password_again password 6ygr'; apt-get -y install mysql-server
这似乎是正确的,并且在 shell 中手动执行此命令会提供所需的输出。但是当执行 perl 脚本时它给出了错误。有什么想法吗?
perl 使用 /bin/sh
来执行命令。尝试将该字符串提供给 sh,如果出现相同的错误,那就是问题所在。
如果要使用 bash 执行该语句,请使用 bash -c "cmd args ..."
作为命令。
如果您只需要将一行传递给命令,最好避免 <<<
的不可移植 bash主义。相反,使用在任何 shell.
中都有效的 echo "whatever" | command
您应该使用 IPC::Run
进行此类工作
use IPC::Run qw(run);
my @options = map "mysql-server mysql-server/$_ password 6ygr",
qw(root_password root_password_again);
my $mysql_stat;
run [qw(debconf-set-selections)], '<', $_, '>>', $mysql_stat, '2>>', $mysql_stat
or die "debconf-set-selections: $?"
for @options;
run [ $install_cmd, 'mysql-server' ], '>>', $mysql_stat, '2>>', $mysql_stat
or die "$install_cmd: $?";
主要原因是您不喜欢处理引用问题和不兼容等问题。
my $mysql_cmd = 'debconf-set-selections <<< \'mysql-server mysql-server/root_password password 6ygr\' ;debconf-set-selections <<< \'mysql-server mysql-server/root_password_again password 6ygr\'; '.our $install_cmd." mysql-server";
my $mysql_stat = `$mysql_cmd`;
我正在使用上面的代码从我的 perl 脚本安装 mysql。但是我收到了这个错误
sh: 1: Syntax error: redirection unexpected
当我打印 $mysql_cmd
我得到 debconf-set-selections <<< 'mysql-server mysql-server/root_password password 6ygr' ;debconf-set-selections <<< 'mysql-server mysql-server/root_password_again password 6ygr'; apt-get -y install mysql-server
这似乎是正确的,并且在 shell 中手动执行此命令会提供所需的输出。但是当执行 perl 脚本时它给出了错误。有什么想法吗?
perl 使用 /bin/sh
来执行命令。尝试将该字符串提供给 sh,如果出现相同的错误,那就是问题所在。
如果要使用 bash 执行该语句,请使用 bash -c "cmd args ..."
作为命令。
如果您只需要将一行传递给命令,最好避免 <<<
的不可移植 bash主义。相反,使用在任何 shell.
echo "whatever" | command
您应该使用 IPC::Run
进行此类工作
use IPC::Run qw(run);
my @options = map "mysql-server mysql-server/$_ password 6ygr",
qw(root_password root_password_again);
my $mysql_stat;
run [qw(debconf-set-selections)], '<', $_, '>>', $mysql_stat, '2>>', $mysql_stat
or die "debconf-set-selections: $?"
for @options;
run [ $install_cmd, 'mysql-server' ], '>>', $mysql_stat, '2>>', $mysql_stat
or die "$install_cmd: $?";
主要原因是您不喜欢处理引用问题和不兼容等问题。