【问题标题】:How to fetch xargs command output and exit code如何获取 xargs 命令输出和退出代码
【发布时间】:2021-01-20 21:10:42
【问题描述】:

我需要获取以 xargs 开头的命令的退出代码和标准输出。这是我的命令行:

RESULT=`ls -1t . | grep \\.sh\$ | xargs -d '\n' yad --list --no-headers  --button DELETE:2 --button BACKUP:1 --button CANCEL:0 --column=1:TEXT`
RETVALUE=$?

RESULT 变量尊重yad 列表的选择,但 RETVALUE 不尊重按下的按钮。 如 xargs 手册页所述,如果命令(示例中为 yad)退出时的值不是 0,则退出代码为 123。

【问题讨论】:

  • 请包含minimal reproducible example 并更清楚地描述预期行为。
  • @oguzismail 我对示例代码的获取结果的描述进行了一些更改。请帮助我更好地描述我的问题
  • 你能缩小问题的范围吗?例如,如果你去掉反引号,你会从 xargs/yad 得到预期的结果吗?是仅在捕获输出时,还是无论如何他们都会做错事?
  • 如果将xargs yad ... 替换为xargs falsexargs sh -c 'echo result; exit 5' 会怎样?
  • 是否保证yad 将被执行一次?如果一个调用返回 1 而另一个返回 2,你对 RETVALUE 有什么期望?

标签: bash shell xargs


【解决方案1】:

我找到了修改IFS的解决方案。

LIST=`ls -1t . | grep \\.sh\$`
OLDIFS=$IFS
IFS='
'
RESULT=`yad --list --no-headers  --button DELETE:2 --button BACKUP:1 --button CANCEL:0 --column=1:TEXT $LIST`
RETVALUE=$?
IFS=$OLDIFS

这样我可以避免使用xargs(这样我就可以获取 yad 的正确退出代码)并且我能够正确处理带有空格的元素。

【讨论】:

    猜你喜欢
    • 2015-11-21
    • 2018-11-04
    • 2011-06-28
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 2012-01-02
    • 2018-03-29
    • 2016-10-08
    相关资源
    最近更新 更多