我有以下 bash 命令:
$(ls -l /var/ | grep www) > cat folder_exists
Run Code Online (Sandbox Code Playgroud)
但它不能正常工作。我希望实现的是一个命令,它检查文件夹内是否有 www 文件/var/
夹,并将该特定命令的结果打印到文件folder_exists
. 我也试过多次重新输入命令,给出的例子
cat $(ls -l /var/ | grep www) > folder_exists
Run Code Online (Sandbox Code Playgroud)
甚至
cat $(ls -l /var | grep www) > folder_exists
Run Code Online (Sandbox Code Playgroud)
以防万一斜线造成了伤害,但无济于事。
我的问题是,即使我正在创建文件folder_exists
,我也无法将输出打印到它。有人可以告诉我我哪里出错了吗?
最好这样做:
if [ -d /var/www ] ; then touch folder_exists ; else touch folder_absent ; fi
Run Code Online (Sandbox Code Playgroud)
该命令的第一个版本执行以下操作:$( ... )
首先由...
. 由于您调用 ls -l | grep www,你要么得到一个包含多个单词的行,要么什么都没有。在第一种情况下,它试图被执行,但这没什么意义。如果你打字你会得到什么
drwxr-xr-x 15 root root 4096 Aug 20 13:48 log
Run Code Online (Sandbox Code Playgroud)
在命令提示符下?没有名为 的命令drwxr-xr-x
。如果您使用该cat $( ls -l /var | grep www)
表单,则首先将 the$( ... )
替换为由 生成的内容...
,然后 cat 将其解释为 cat 的文件列表(以drwxr-xr-x
;开头,很可能没有这样的文件)。
此外,如果你尝试做这样的事情:
command > cat file
Run Code Online (Sandbox Code Playgroud)
将会发生的是,它cat
被解释为一个文件名来存储 的输出command
,而不是一个命令。要解释cat
为命令,您需要一个管道符号,就像您在 ls | 中正确使用的那样 格雷普:
command | cat
Run Code Online (Sandbox Code Playgroud)
但是,如果您的目的是将命令的输出存储在文件中,那么只需使用
command > file
Run Code Online (Sandbox Code Playgroud)
事实上,你可以这样做
ls /var | grep www > file
Run Code Online (Sandbox Code Playgroud)
仅当 ls 中没有 www 文件夹时,此文件才会为空。但要小心!如果有文件夹 /var/ewwwocks,则该文件还将包含一行。最好简单地使用
ls /var/www > file
Run Code Online (Sandbox Code Playgroud)
长话短说,使用条件构造 if ... ; 然后 ... ; 别的 ... ; 菲
归档时间: |
|
查看次数: |
818 次 |
最近记录: |