这行shell脚本起什么作用?

这行shell脚本起什么作用?

ls “${VMX_DIR}” | grep -q delta > /dev/null 2>&1;

它列出 VMX_DIR 中的文件,然后将它们通过管道传输到 grep 中,但它在做什么?

答案1

它会检查是否存在包含的文件或路径delta${VMX_DIR}然后通过 grep 的退出代码返回结果,因为如果找到匹配项,grep 将返回正常退出代码 0,如果没有找到匹配项,则返回失败代码 1。它在 bash 条件中很有用。

以下是它逐条语句所做的事情:

ls “${VMX_DIR}”

列出路径中存储的目录的内容${VMX_DIR}

| grep -q 增量

将结果通过管道传输到 grep,搜索目录列表的结果以delta忽略任何到 stout 的输出。

> /dev/null 2>&1;

将 stdout 重定向到 ,/dev/null这样就不会打印它。2>&1告诉 bash 将 stderr 重定向到 stdout(现在将重定向到/dev/null)。分号只是终止该行。

答案2

grep手册页中:

   -q, --quiet, --silent
          Quiet;  do  not write anything to standard output.  Exit immedi-
          ately with zero status if any match is found, even if  an  error
          was detected.  Also see the -s or --no-messages option.

基本上,这是在查找是否存在包含的文件名delta,并返回true是否false存在。它实际上用这个真值做什么,从你那里的小片段中,任何人都可以猜测。

答案3

它似乎只是用于检测单词“delta”是否在列表中,在这种情况下它将返回 0,否则它将返回 1。因此,根据返回值,您可以知道 delta 是否存在。

答案4

最后一部分重定向标准输出和标准错误/dev/null- 即,grep 命令的任何输出(错误、警告或匹配)都将被删除。这种命令可用于进行没有输出的简单检查 - 变量$?将为零或非零,具体取决于是否grep成功。

> /dev/null 2>&1您可以通过用 替换 来简化此代码&>/dev/null,在这种情况下它将执行相同的操作:将所有输出流重定向到/dev/null

I/O 重定向了解详情。

相关内容