如果我这样做,它会向我显示我的/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
保留该订单?
如果重要的话,我正在使用tcsh
shell。
感谢约翰的提示-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'"'"'; \\
'
答案1
该xargs
命令确实保持了其参数的顺序 - 但它将所有参数传递给 的一个实例ls
,这会按字母顺序为您提供输出,默认情况下也是如此。要获得您想要的行为,请-n 1
向命令添加一个参数以一次xargs
仅传递一行输出,或者如果使用 的 GNU 实现,请添加一个选项以告诉它不要对文件列表进行排序。ls
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