可以更改xargs的默认分隔符吗?

Sri*_*bat 9 whitespace command-line xargs

我想要以下行为,而不必使用选项明确指定它:

xargs -d '\n'
Run Code Online (Sandbox Code Playgroud)

与大多数命令不同,您不能只使用别名,因为管道无法识别别名(作为旁注,为什么这样设计?).我也尝试创建自己的~/bin/xargs脚本,但我认为这不像在脚本中读取"$ @"作为字符串那么简单.

有关默认情况下如何使分隔符成为换行符的任何建议?当我在路径中有空格(并使用find ... -print0 | xargs -0其他不需要的效果)时,我不想得到一堆错误.

UPDATE

我的shell脚本尝试是这样的:

/usr/local/bin/xargs -d '\n' "$@"
Run Code Online (Sandbox Code Playgroud)

Chi*_*kro 8

如果您的版本xargs不支持设置不同的分隔符(比如 2011 FreeBSD 服务器上的那个……),您可以使用tr将您的分隔符转换成可以使用的东西xargs。如果您的输入包含您xargs认为分隔符的字符(例如空格),您可能需要在前后使用一些翻译,或者您可以简单地将分隔符转换为NULL/0x0并将-0参数传递给xargs.

这是一个xargs用于在 $PATH 中查找可能是一个可能使用的 shell 的文件的示例(我在这里的原因,然后我想出了另一个答案):
echo $PATH | tr ':' '\0' | xargs -0 ls | grep sh | sort


小智 6

xargs -d '\n' -n1 echo在命令行上进行了测试,它的工作方式与广告一致; 将输入分成单行并回显它.

你可能会被变量赋值期间关于shell转义的假设所困扰.例如,如果您的shell脚本与此类似:

CMD ="xargs -d'\n'-n1 echo"
cat inputfile | $ CMD

然后发生错误,因为整个CMD字符串周围的双引号保留了单引号和分隔符中的反斜杠.

如果您将xargs命令括在引号内,则可以将其更改为以下内容(无单引号)

CMD ="xargs -d \n -n1 echo"
cat inputfile | $ CMD

它可能会根据您的需要运作.

在CentOS 6.4上测试,xargs版本4.4.2