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)
如果您的版本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