linux - 从 perl 执行 if else shell 命令

标签 linux bash perl

我以前从未遇到过这种情况,所以我需要一些帮助。我正在尝试从 shell 命令但在 perl 中发出 if/else 语句。我试过 system 和 exec 但没有成功。这是代码示例

if ($os eq 'Ubuntu'){
    system('if ! dpkg -l curl &> /dev/null; then apt-get install curl -y; fi');
    foreach my $mod (keys %deb){
        eval "use $mod";
        if($@){
            system("apt-get install $deb{$mod} -y");
            eval "use $mod";
        }
    }
}

如果我运行命令 if ! dpkg -l curl &>/dev/null;然后 apt-get 安装 curl -y; fi 在 shell 中它工作正常但是从 perl 执行它会跳过 if 部分并继续安装它。

最佳答案

if 工作得很好。

$ perl -e'system("if ! true ; then echo ok ; fi")'

$ perl -e'system("if ! false ; then echo ok ; fi")'
ok

不过有个问题。您发布的是 bash 命令,但是 system(EXPR)system('/bin/sh', '-c', EXPR)。简单替换

system(EXPR)

system('/bin/bash', '-c', EXPR)

应该可以解决问题。

关于linux - 从 perl 执行 if else shell 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38599403/

相关文章:

mysql - 恢复数据库备份导致坏字符

c - 程序仅在首次运行时挂起?

bash - awk;通过 file1 搜索 file2

perl - 如何保留嵌套 Perl 哈希的插入顺序?

java - 在Linux中配置tomcat并运行部署的应用程序

c - 提取子进程 PID 最后一位数字

linux - git bash shell .bashrc 每次都不工作

linux - 意外标记附近的语法错误 `fi' Linux

perl - 为什么在 perl one liner 中以 slurp 模式使用 -p|-n ?

perl - 如何在 Perl 中找到 Unicode 字符串的长度?