我有以下小的脚本,该脚本将告诉我哪些包需要服务器重新启动。我想把它放在〜/ .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。
先谢谢了。
答案 0 :(得分: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
答案 1 :(得分:1)
“没有这样的文件或目录”是来自cat
命令的错误消息。只需重定向stderr:
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
存在。这可能是正确的,但至少要知道这是一个假设。