linux 在脚本中'location=$(type -p“htop”)'是什么意思?[duplicate]

pw9qyyiw  于 2022-12-03  发布在  Linux
关注(0)|答案(2)|浏览(139)

此问题在此处已有答案

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");我需要一个关于这个的清晰解释。

rqmkfv5c

rqmkfv5c1#

  • !否定以下命令的退出状态;
  • location=...为变量$location赋值;
  • $(...)命令替换。它扩展到所包含的命令的输出,其退出状态作为赋值的退出状态传播;
  • type -p htop(此处不需要双引号)在$PATH中搜索可执行文件htop,并返回其完整路径。如果不存在此类可执行文件,并且没有别名或名为htop的函数,则会失败(在这种情况下,会返回空字符串,但不会失败)。

将所有这些放在一起,它搜索一个名为htop的可执行文件,将其完整路径分配给$location,如果找不到它(并且没有定义它的别名或函数),它运行sudo apt install -y htop,在某些系统上(使用apt管理软件包)尝试使用root权限安装htop软件包,并回答yes的任何问题。

k10s72fa

k10s72fa2#

简言之,赋值的退出状态是命令替换的退出状态,命令替换的退出状态是type的退出状态。
如果htop是可以执行的命令,则type -p htop的退出状态为0,输出为该命令的完整路径。
这里的想法是,如果htop存在,则为location分配htop的完整路径,如果不存在,则运行sudo apt install -y htop来安装它(注解中提到的一个小问题是,如果需要安装htop,则location仍然存在)。

相关问题