为什么`watch`使`ls / tmp`列出$ HOME的内容?

鲁斯兰

我正在尝试查看/tmp/目录中的文件数为此,我认为此命令将起作用:

watch sh -c 'ls /tmp/|wc -l'

但这似乎ls没有任何论据就可以工作也就是说,我在~那里我得到的文件数量而不是/tmp/我找到了一种解决方法,该方法似乎可行:

watch sh -c 'ls\ /tmp/|wc -l'

但是,为什么我要逃避之间的空间ls/tmp/命令是如何转换的,watch以便将ls输出馈送到wc,但/tmp/不作为参数传递给ls

可以通过strace以下方式看到差异

$ strace -ff -o bq watch sh -c 'ls\ /tmp/|wc -l'
^C
$ strace -ff -o nobq watch sh -c 'ls /tmp/|wc -l'
^C
$ grep exec bq* | grep sh
bq.29218:execve("/usr/bin/watch", ["watch", "sh", "-c", "ls\\ /tmp/|wc -l"], [/* 54 vars */]) = 0
bq.29219:execve("/bin/sh", ["sh", "-c", "sh -c ls\\ /tmp/|wc -l"], [/* 56 vars */]) = 0
bq.29220:execve("/bin/sh", ["sh", "-c", "ls /tmp/"], [/* 56 vars */]) = 0
$ grep exec nobq* | grep sh
nobq.29227:execve("/usr/bin/watch", ["watch", "sh", "-c", "ls /tmp/|wc -l"], [/* 54 vars */]) = 0
nobq.29228:execve("/bin/sh", ["sh", "-c", "sh -c ls /tmp/|wc -l"], [/* 56 vars */]) = 0
nobq.29229:execve("/bin/sh", ["sh", "-c", "ls", "/tmp/"], [/* 56 vars */]) = 0

在反引号的情况下,ls /tmp作为单个参数传递给-cto sh,该参数按预期运行。如果没有该反引号,则该命令将在watch运行时进行单词拆分,sh从而依次运行提供的sh,因此仅ls将其作为参数传递给-c,这意味着子-subsh将仅运行裸ls命令,并列出当前工作的内容目录。

那么,为什么会并发症sh -c ...呢?为什么不简单地运行watch 'ls /tmp|wc -l'呢?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么“ sudo ls〜”显示/ home / username而不是/ root的内容?

ls命令不列出最新目录内容

为什么 ls -R 不递归列出模式的文件?

(为什么)使用ls -A列出隐藏文件不好?

为什么ls -d也列出文件,在哪里记录?

为什么“ ls”不列出以“。”开头的文件。在Linux中

为什么ls命令没有列出巨大的文件大小?

为什么 '!head' 命令列出文件内容?

为什么不列出项目大小以适合其内容?

为什么C stdout不返回“ ls”命令内容?

为什么`ls`每行列出多个文件,而`ls pipe / redirect`每行仅列出1个文件?

'ls $ variable'不列出文件夹内容

为什么git ls-remote不列出所有远程引用?

列出git-ls-remote时,为什么标记名称后面有“ ^ {}”?

为什么`ls -lF` 列出目录中没有前缀“~$”的文件?

为什么从CRLF文件中读取*(星号)时echo命令没有列出目录内容?

如果按Super_L + Space,bash为什么列出/ etc / hosts的有效内容?

以root身份运行时,ls命令不返回任何内容,为什么?

当列出所有已安装的Debian软件包时,为什么不包含“ ls”作为软件包?

为什么要列出种类*-> *?

如何列出目录内容

命令“docker-machine ls”在我的 mac 上没有列出任何内容

“ ls -ld / tmp”输出中的“ t”字母是什么?

如何列出 /tmp 文件夾中的文件

为什么是内容

为什么在链接时/ tmp不清空?

/ tmp为什么不使用tmpfs?

为什么“ls not_existing_file 2&>1 > log.txt”不向log.txt写入任何内容?

为什么HOME路径不同