首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是OsX下的xargs OsX

什么是OsX下的xargs OsX
EN

Stack Overflow用户
提问于 2012-01-10 13:27:18
回答 7查看 5.6K关注 0票数 11

在OSX下,它们是否等同于Linux下的xargs -r?如果没有数据的话,我想找一种方法来插入管道。

例如,假设您做了以下操作:

代码语言:javascript
复制
touch test
cat test | xargs -r echo "content: "

这不会产生任何结果,因为xargs中断了管道。

在OSX下是否有隐藏的xargs选项或其他东西来实现相同的结果?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-01-10 14:03:27

您可以使用test[

代码语言:javascript
复制
if [ -s test ] ; then cat test | xargs echo content: ; fi
票数 2
EN

Stack Overflow用户

发布于 2012-01-10 16:18:06

xargs的POSIX标准要求命令执行一次,即使没有参数。这是一个麻烦,这就是为什么GNU xargs-r选项。不幸的是,BSD (MacOS X)和其他主流Unix版本(AIX、HP、Solaris)都不支持它。

如果这对您非常重要,那么获取并安装GNU xargs,以便您的环境能够找到它,而不会影响系统(所以,除非您比我更勇敢,否则不要替换/usr/bin/xargs --但是/usr/local/bin/xargs可能会好,或者$HOME/bin/xargs,或者…)。

票数 3
EN

Stack Overflow用户

发布于 2013-12-02 18:49:03

没有确定您正在运行的xargs是否为GNU的标准方法。我将$gnuargs设置为"true“或"false”,然后使用一个函数替换xargs并执行正确的操作。

在Linux、FreeBSD和MacOS上,这个脚本适合我。xargs的POSIX标准要求命令执行一次,即使没有参数。FreeBSD和MacOS X违反了这个规则,因此不需要"-r“。GNU觉得它很烦人,并添加了-r。这个脚本做了正确的事情,如果您找到了Unix的一个版本,它可以以其他方式进行增强。

代码语言:javascript
复制
#!/bin/bash

gnuxargs=$(xargs --version 2>&1 |grep -s GNU >/dev/null && echo true || echo false)

function portable_xargs_r() {
  if $gnuxargs ; then
    cat - | xargs -r "$@"
  else
    cat - | xargs "$@"
  fi
}

echo 'this' > foo
echo '=== Expect one line'
portable_xargs_r <foo echo "content: "
echo '=== DONE.'

cat </dev/null > foo
echo '=== Expect zero lines'
portable_xargs_r <foo echo "content: "
echo '=== DONE.'
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8803987

复制
相关文章

相似问题

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