首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sh: 1:语法错误:使用backticks perl时意外重定向

问sh: 1:语法错误:使用backticks perl时意外重定向
EN

Stack Overflow用户
提问于 2015-03-20 12:47:05
回答 2查看 5.3K关注 0票数 2
代码语言:javascript
复制
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。但我发现了这个错误

代码语言:javascript
复制
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脚本时,会出现错误。有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-20 13:45:53

您应该将IPC::Run用于这类作业。

代码语言:javascript
复制
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: $?";

主要原因是你不喜欢处理引用问题和不兼容等问题。

票数 -1
EN

Stack Overflow用户

发布于 2015-03-20 12:58:37

perl使用/bin/sh执行命令。尝试将该字符串提供给sh,如果您得到相同的错误,这就是问题所在。

如果要使用bash执行该语句,请使用bash -c "cmd args ..."作为命令。

如果您只需要将一行传递给命令,那么最好避免<<<的不可移植的bashism。相反,使用在任何shell中工作的echo "whatever" | command。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29166876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档