此问题在此处已有答案:
How can I check if a program exists from a Bash script?(40个答案)
check if a program is already installed [duplicate](1个答案)
3小时前关门。
剧本是这样的
#!/bin/bash
echo
echo "################################################################"
echo " Installing Htop "
echo "################################################################"
echo
if ! location=$(type -p "htop"); then
sudo apt install -y htop
fi
我很困惑这个脚本的代码片段是做什么的location=$(type -p "htop");
我需要一个关于这个的清晰解释。
2条答案
按热度按时间rqmkfv5c1#
!
否定以下命令的退出状态;location=...
为变量$location
赋值;$(...)
是命令替换。它扩展到所包含的命令的输出,其退出状态作为赋值的退出状态传播;type -p htop
(此处不需要双引号)在$PATH
中搜索可执行文件htop
,并返回其完整路径。如果不存在此类可执行文件,并且没有别名或名为htop
的函数,则会失败(在这种情况下,会返回空字符串,但不会失败)。将所有这些放在一起,它搜索一个名为
htop
的可执行文件,将其完整路径分配给$location
,如果找不到它(并且没有定义它的别名或函数),它运行sudo apt install -y htop
,在某些系统上(使用apt
管理软件包)尝试使用root权限安装htop
软件包,并回答yes
的任何问题。k10s72fa2#
简言之,赋值的退出状态是命令替换的退出状态,命令替换的退出状态是
type
的退出状态。如果
htop
是可以执行的命令,则type -p htop
的退出状态为0,输出为该命令的完整路径。这里的想法是,如果
htop
存在,则为location
分配htop
的完整路径,如果不存在,则运行sudo apt install -y htop
来安装它(注解中提到的一个小问题是,如果需要安装htop
,则location
仍然存在)。