Solaris

為什麼 SmartOS (SunOS) 上的 xargs -n 的行為與其他實現不同?

  • November 30, 2018

-n在 SmartOS(我假設是 Solaris)中找到的 xargs 選項似乎與我遇到的任何其他版本的 xargs 不同。

舉個例子:

內置 /usr/bin/xargs (奇怪的行為):

# printf 'one\0two\0three' | xargs -0 -I{} -n 1 echo "- {}"
- {} one
- {} two
- {} three

GNU Findutils /opt/local/bin/xargs(預期行為):

# printf 'one\0two\0three' | /opt/local/bin/xargs -0 -I{} -n 1 echo "- {}"
- one
- two
- three

來自 MacOS、NetBSD 和 CentOS 的 Xargs 的行為都與上一個範例相同。SmartOS xargs 有什麼不同?

從 SmartOS xargs 聯機幫助頁:

  -n number
                 Invokes utility using as many standard input arguments
                 as possible, up to number (a positive decimal integer)
                 arguments maximum. Fewer arguments are used if:

                     o      The command line length accumulated exceeds
                            the size specified by the -s option (or
                            {LINE_MAX} if there is no -s option), or

                     o      The last iteration has fewer than number, but
                            not zero, operands remaining.

從 Gnu Findutils xargs 聯機幫助頁:

  -n max-args, --max-args=max-args
         Use at most max-args arguments per command line.  Fewer than max-args arguments will be used if the size (see the -s option) is  exceeded,  un‐
         less the -x option is given, in which case xargs will exit.

我在移植 shell 腳本時發現了這種差異,我很好奇是否有人知道為什麼行為不同。

不能組合-I-n選項。這就是標準所說的:

-I和選項是互斥的-L-n如果在命令行上給出了多個,則某些實現使用指定的最後一個;其他實現以不同方式處理選項的組合。

另請參見thisthis

引用自:https://unix.stackexchange.com/questions/485072