ls 是否有可能保持其输入的顺序

Kau*_*odi 2 ls xargs

如果我这样做/usr/bin/which --all git,它显示我的所有出现git在我$PATH在第一行显示有效的一种

从下图中,中的git版本/home/kmodi/stowed/bin/git是有效的。

现在我想知道结果的真实文件名。

所以对于/home/kmodi/stowed/bin/git,这是一个符号链接,我想知道它指向什么。

/usr/bin/which --all git | xargs \ls -Fpl显示符号链接参考。但是输出令人困惑..不保留列出文件的原始顺序!因此,现在查看该输出(如下),人们可能会认为其中的版本/cad/..是有效的git二进制路径。

有没有办法xargs保留该订单?

在此处输入图片说明


如果重要的话,我正在使用tcshshell。


感谢 John 关于 的提示-n 1,我终于有了我喜欢的解决方案。太乱了……那些名言!(感谢tcsh),但它有效。

alias whichall '/usr/bin/which --all \!* \\
                | xargs -n 1 \ls -Fpl --color=always \\
                | awk -v OFS="" '"'"'{$1=$2=$3=$4=$5=$6=$7=$8=""; print $0}'"'"' \\
                | \sed '"'"'/^$/d'"'"'; \\
               '
Run Code Online (Sandbox Code Playgroud)

现在whichall git给出:在此处输入图片说明

Joh*_*ohn 5

xargs命令确实保持了其参数的顺序 - 但它将所有参数都传递给了 的一个实例ls,该实例按字母顺序为您提供输出,默认情况下会这样做。要获得您想要的行为,请-n 1xargs命令添加一个参数以一次只传递一行输出ls,或者如果使用 GNU 实现ls,则添加一个-U选项以告诉它不要对文件列表进行排序。

的行为ls

$ ls -lad /usr/bin /etc
drwxr-xr-x. 146 root root 12288 May 18 09:46 /etc
dr-xr-xr-x.   2 root root 57344 Dec 12 15:30 /usr/bin
Run Code Online (Sandbox Code Playgroud)