如何在bash

时间:2018-04-22 05:10:58

标签: bash shell

我想查看Android上存在的目录。

https://stackoverflow.com/a/6364244/8586214,我明白了。所以我使用下面的adb

if [ adb shell ls ${test_dir}  2> /dev/null ] ;
then
   echo "files exist"
else
   echo "files do not exist"

fi

我是bash脚本的新手。我知道adb shell ls将返回所有文件名。但是2> /dev/null的含义是什么?

我只关心files do not exist条件。那么如何反转条件?

修改

if [ ! adb shell ls ${test_dir}  2> /dev/null ] ;
then
   echo "files exist"
else
   echo "files do not exist"

fi

添加!对我无效。

1 个答案:

答案 0 :(得分:0)

在表达式中:

if [ adb shell ls ${test_dir}  2> /dev/null ]

重定向2> /dev/null会重定向stderr上的任何邮件(由abd shell ls ${test_dir}导致的任何错误/dev/null古怪地称为bit bucket。实质上是位桶是一个无处可去的系统设备节点。因此,您可以将您喜欢的任何输出复制或重定向到/dev/null,它就会消失(意味着它不会被复制到任何地方而且不再被重定向 - 它只是去进入比特桶 - 方便的黑洞)这具有抑制测试本身的任何输出的效果。

你问题的第二部分询问如何否定(反转)一个测试条款。简单的答案是在测试的前面加上'!'

如果您还有其他问题,请与我们联系。

在进一步讨论并整理出adb是一个android工具之后,解决方案是在执行命令本身之后简单地检查返回,例如

$ adb shell ls ${test_dir}  2> /dev/null

然后用

测试返回
if [ "$?" -ne '0' ]; then 
    # handle error
fi

如果您对此问题有进一步的疑问,请告诉我。