我在Perl中重写了一个bash脚本。翻译Bash到Perl
原始脚本检查Linux软件包是否处于未配置的状态,如果是,则删除并重新安装它。
#!/bin/bash
if [[ $(dpkg -l | grep libc-bin | grep iF) || $(dpkg -l | grep libc-dev-bin | grep iU) ]] ; then
echo "do something"
fi
我开始看到如果我可以使用系统调用,并将它们存储为变量,然后只需运行这些多个变量的if
声明。这似乎没有工作。
#!/usr/bin/perl
my $libcUnconfigured = system("dpkg -l | grep libc-bin | grep iF");
my $libcDevUnconfigured = system("dpkg -l | grep libc-dev-bin | grep iF");
if ($libcUnconfigured || $libcDevUnconfigured) {
print "Do something";
}
'system'返回返回码,而不是输出。改用'qx //'。 – simbabque
你为什么在Perl中使用grep? – 123
获取软件包列表:'my @libcUnconfigured = grep {/ libc-bin | iF /} qx(dpkg -l)'。 'qx'(“backticks”)返回一个列表,其中'grep'过滤器,你得到一个列表(数组)。 'qx'使用'/ bin/sh'或系统提供的任何内容,因此您可能需要指定命令路径 – zdim