mint@mint-VirtualBox:/$ ls -l $(which cp)
-rwxr-xr-x 1 root root 153976 Sep 5 2019 /usr/bin/cp
mint@mint-VirtualBox:/$ which cp | ls -l
total 1043228
lrwxrwxrwx 1 root root 7 Jan 21 15:09 bin -> usr/bin
drwxr-xr-x 4 root root 4096 Jan 21 15:22 boot
drwxr-xr-x 2 root root 4096 Jan 21 15:10 cdrom
drwxr-xr-x 18 root root 4100 Jan 22 20:33 dev
drwxr-xr-x 149 root root 12288 Jan 21 15:22 etc
drwxr-xr-x 3 root root 4096 Jan 21 15:11 home
lrwxrwxrwx 1 root root 7 Jan 21 15:09 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Jan 21 15:09 lib32 -> usr/lib32
lrwxrwxrwx 1 root root 9 Jan 21 15:09 lib64 -> usr/lib64
lrwxrwxrwx 1 root root 10 Jan 21 15:09 libx32 -> usr/libx32
drwx------ 2 root root 16384 Jan 21 15:09 lost+found
drwxr-xr-x 2 root root 4096 Jan 3 18:00 media
drwxr-xr-x 2 root root 4096 Jan 3 18:00 mnt
drwxr-xr-x 2 root root 4096 Jan 3 18:00 opt
dr-xr-xr-x 162 root root 0 Jan 22 20:33 proc
drwx------ 3 root root 4096 Jan 21 22:21 root
drwxr-xr-x 35 root root 960 Jan 22 20:38 run
lrwxrwxrwx 1 root root 8 Jan 21 15:09 sbin -> usr/sbin
drwxr-xr-x 2 root root 4096 Jan 3 18:00 srv
-rw------- 1 root root 1068185600 Jan 21 15:09 swapfile
dr-xr-xr-x 13 root root 0 Jan 22 20:33 sys
drwxrwxrwt 15 root root 4096 Jan 22 20:38 tmp
drwxr-xr-x 14 root root 4096 Jan 3 18:00 usr
drwxr-xr-x 11 root root 4096 Jan 3 18:34 var
mint@mint-VirtualBox:/$
为什么这两个命令会产生不同的结果?管道运算符将一个命令的输出与第二个命令的输入连接起来,并且由于的输出是which cp
路径,cp
它应该可以工作,还是不应该?
提前感谢您的时间,您好!
答案1
正如解释的那样卡西莫多的回答 ls
不能对 stdin 进行操作,但您可以强制它这样做:
$ which cp | xargs ls -l
-rwxr-xr-x 1 root root 153976 Sep 5 2019 /usr/bin/cp
输入 即可查看有关 xargs 的更多信息man xargs
。
答案2
which cp | ls
尝试将 的标准输出馈送which cp
到 的标准输入ls
。但是ls
POSIX 规范内容如下:
标准输入
不曾用过
因此您无法将任何内容导入ls
。另一方面,在
ls "$(which cp)"
的输出which cp
为争论到ls
,当然可以接受参数(顺便说一下,引用上述命令替换是一种很好的做法)。