【问题标题】:How to hide bash shell errors on the screen [duplicate]如何在屏幕上隐藏 bash shell 错误 [重复]
【发布时间】:2016-06-26 08:17:26
【问题描述】:

我有小脚本:

if [ $proxy_chooice -eq 1 ]; then

echo 'Choose kinds of proxy\n 1)http 2) https 3)ftp'

read  proxyType

当用户输入或写字然后输入。 它会写出来

test.sh: 50: [: -eq: unexpected operator

我想隐藏这些错误我能做什么。非常感谢。

【问题讨论】:

  • 为什么要隐藏错误而不是修复它们?这是不好的做法!
  • 您应该能够将stderr(错误输出)传送到“空设备”/dev/null。只需将2 > /dev/null 附加到脚本的命令行调用即可。
  • 你能在这个脚本中帮助我吗?我只想要支票号码,我不希望用户知道脚本名称。谢谢
  • 您可以使用case 命令来检查用户输入。
  • 在您的代码中,您可能应该引用变量,如if [ "$proxy_chooice" -eq 1 ]

标签: bash


【解决方案1】:

如果只想抑制输出,只需添加 2>/dev/null:

$ rm non-existent-file
rm: cannot remove `non-existent-file`: No such file or directory
$ rm non-existent-file 2>/dev/null
$

但处理您的情况的正确方法是在比较之前检查您尝试比较的变量是否不为空...

【讨论】:

    【解决方案2】:

    错误是由于$proxy_chooice 没有值(变量名中的错字?)。因此测试变成了

    if [ -eq 1 ]; then
    

    您可以通过将其转换为字符串比较来“修复”它(但是,如果这只是一个拼写错误的情况,那么这意味着 if-statement 中的代码将永远不会 em> 被执行):

    if [ "x$proxy_chooise" = "x1" ]; then
    

    您应该修复代码,而不是“隐藏”错误输出。

    您还需要正确处理无效输入。

    例如:

    echo "You need proxying?"
    select answer in  "Yes" "No"; do
        case $REPLY in
            1|2)    proxy_choice=$REPLY; break  ;;
            *)      echo "Please select 1 or 2" ;;
        esac
    done
    echo "$answer, sir!"
    
    if [ $proxy_choice -eq 1 ]; then
        echo "What kind of proxy would you require?"
    
        select answer in "HTTP" "HTTPS" "FTP"; do
            case $REPLY in
                [1-3])  proxy_type=$REPLY; break    ;;
                *)      echo "Please select 1-3"    ;;
            esac
        done
    
        echo "An $answer proxy? Excellent!"
    fi
    

    跑步:

    You need proxying?
    1) Yes
    2) No
    #? 3
    Please select 1 or 2
    #? 2
    No, sir!
    

    第二次去:

    You need proxying?
    1) Yes
    2) No
    #? 1
    Yes, sir!
    What kind of proxy would you require?
    1) HTTP
    2) HTTPS
    3) FTP
    #? 4
    Please select 1-3
    #? 2
    An HTTPS proxy? Excellent!
    

    【讨论】:

      猜你喜欢
      • 2018-11-24
      • 2016-04-01
      • 1970-01-01
      • 2015-10-26
      • 2017-12-03
      • 1970-01-01
      • 2022-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多