0

我正在尝试通过将它包含在反引号中并使用 Mixlib::ShellOut 在 ruby​​ 中运行管道 Linux 命令。但是在这两种情况下,我得到一个空字符串作为输出,即使实际输出看起来像这样 i | 内核默认开发 | 包装 | 3.0.101-108.21.1 | x86_64 | SLES11-SP4-更新

实际上,zypper search 命令将以表格格式显示输出。

我使用的命令是 zypper search -s kernel | grep -P '(^|\s)\Kkernel-default-devel(?=\s|)' | grep (rpm -qa | grep kernel-default-[0-9] | sort -Vr | head -1 | cut -c 16- | awk '{print substr($0, 1, length($0)-7)}' )

Mixlib::ShellOut 的代码如下所示。

current_package_cmd = "zypper search -s kernel | grep -P '(^|\s)\Kkernel-default-devel(?=\s|$)' | grep $(rpm -qa | grep kernel-default-[0-9] | sort -Vr | head -1 | cut -c 16- | awk '{print substr($0, 1, length($0)-7)}')"
cmd = Mixlib::ShellOut.new(current_package_cmd )
cmd.run_command 
current_package = cmd.stdout
status = cmd.exitstatus
log "current package is #{current_package} and status is #{status}"

输出变量 current_package 的值为空字符串,exitstatus 为 1。

请告知如何解决该问题。

4

0 回答 0