【问题标题】:Debian 9 /.bashrc variable showing file not found instead of being ignoredDebian 9 /.bashrc 变量显示文件未找到而不是被忽略
【发布时间】:2018-07-18 18:08:43
【问题描述】:

我有以下小脚本,它会告诉我哪些软件包需要重新启动服务器。我想把它放在 ~/.bashrc 中,这样我登录时就可以看到它。

#shows which packages require the server to be rebooted
package=$(cat /var/run/reboot-required.pkgs)
if [ ! -f /var/run/reboot-required ]
then
echo "No packages require reboot. Have a nice day :)"
else
echo "*** Hello $USER, you must reboot your machine because of the following 
package(s): $package ***"
echo
fi

但是,当我登录时,由于此服务器现在没有任何需要重新启动服务器的软件包,所以我看到了这个:

cat: /var/run/reboot-required.pkgs: No such file or directory
No packages require reboot. Have a nice day :)    

我怎样才能得到它来显示没有需要重新启动的软件包的消息?除了这个小问题外,一切正常。它确实向我显示了需要重新启动的文件。

服务器是 Debian 9。

提前致谢。

【问题讨论】:

  • package=$(cat /var/run/reboot-required.pkgs) 移动到您的else 分支?
  • 谢谢@Cyrus。那行得通。我习惯于在代码顶部声明任何变量。
  • 缩进代码会更容易阅读。

标签: bash debian


【解决方案1】:

感谢@Cyrus 帮助我。我尝试了他将变量移动到我的 else 语句中的建议,并且奏效了。

之前的代码:

#shows which packages require the server to be rebooted
package=$(cat /var/run/reboot-required.pkgs)
if [ ! -f /var/run/reboot-required ]
then
echo "No packages require reboot. Have a nice day :)"
else
echo "*** Hello $USER, you must reboot your machine because of the following 
package(s): $package ***"
echo
fi

根据 Cyrus 的建议编写代码:

#shows which packages require the server to be rebooted
echo
if [ ! -f /var/run/reboot-required ]
then
echo "No packages require reboot. Have a nice day :)"
else
package=$(cat /var/run/reboot-required.pkgs)
echo "[*** Hello $USER, your must reboot your machine because of the following 
package(s): $package ***]"
echo
fi

【讨论】:

    【解决方案2】:

    “没有这样的文件或目录”是来自cat 命令的错误消息。只需重定向标准错误:

    package=$(cat /var/run/reboot-required.pkgs 2>/dev/null)
    

    或者,对赛勒斯评论中的建议略有不同,在阅读之前测试它是否存在:

    if [ -e /var/run/reboot-required.pkgs ] ; then
        package=$(cat /var/run/reboot-required.pkgs 2>/dev/null)
        ...
    else
        ...
    fi
    

    但是,如果在此代码运行时碰巧删除了文件,则存在竞争条件的轻微风险。

    您似乎假设/var/run/reboot-required 存在当且仅当/var/run/reboot-required.pkgs 存在。这很可能是真的,但至少要知道这是一个假设。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-03
      • 2018-05-04
      • 2021-10-09
      • 1970-01-01
      • 2012-12-07
      相关资源
      最近更新 更多