tree命令-I排除模式与watch结合失效,如何解决?
问题原因
问题出在shell的引号解析顺序:
- 单独执行
tree -L 2 -I '*vfp*'时,当前shell会保留单引号内的*vfp*作为完整的通配符参数传给tree,tree能正确识别这个排除规则。 - 执行
watch tree -L 2 -I '*vfp*'时,外层shell会先剥掉单引号,把*vfp*作为单独参数传给watch。watch默认用sh重新执行命令,此时sh会把*vfp*当作文件名通配符匹配当前目录的内容,而非传给tree作为排除规则,导致-I选项失效。
解决方法
把整个tree命令用单引号包裹,让watch将其作为完整命令字符串交给shell执行,确保通配符规则被tree正确接收:
watch 'tree -L 2 -I "*vfp*"'
执行这个命令后,watch会每次正确调用tree并应用-I '*vfp*'的排除规则,效果和单独执行tree命令一致。
内容的提问来源于stack exchange,提问作者Anil
相关产品推荐
相关产品推荐

