【问题标题】:fuser bash script returning unanticipated outputfuser bash 脚本返回意外的输出
【发布时间】:2022-03-15 00:15:35
【问题描述】:
#!/bin/bash

fuser /mount/foo
echo $?

if [ $? = 0 ]; then
    echo "There are no processes accessing foo."
else
    echo "foo is in use."

回声$?正在返回“1”,因为 fuser 进程正在访问挂载 - 而不是回显“挂载正在使用中”,而是回显“没有进程访问挂载”。除了语法之外,我不确定是什么导致了这种相反的行为,但也许我的构建完全不正确。

【问题讨论】:

    标签: bash fuser


    【解决方案1】:

    您的第二个$? 计算echo 的结果,应该为0。删除echo 或改用变量:

    #!/bin/bash
    
    fuser /mount/foo
    result=$?
    echo $result
    
    if [ $result = 0 ]; then
        echo "There are no processes accessing foo."
    else
        echo "foo is in use."
    

    【讨论】:

    • 因为除了调试之外你不太可能需要echo $result,你可以更简单地写成if fuser /mount/foo; then
    • chepner - 你的例子会导致它总是回显“没有进程访问 foo。” echo $result 是必需的,因为 fuser /mount/foo 不提供我需要的控制,除非回显发生。 1 报告挂载正在使用中,0 报告未使用。目前它总是报告它正在使用,因为第一个回显报告由于 fuser 进程正在使用挂载。第二个回显将提供一个真实的答案,这就是这个脚本不完整的原因。这只是其中的一部分。现在我需要添加循环和其他参数。感谢您的反馈。
    猜你喜欢
    • 2022-10-17
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多