使用终端,最简单的方法是确定用户系统上是否安装了名为dcmdump
的二进制文件。如果已安装,我需要知道它的位置(例如/usr/local/bin
),如果未安装,则希望终端回显FALSE
。
我对终端脚本知之甚少,但输入以下内容:
command -v dcmdump
输出dcmdump安装的目录(如果已安装-非常好),但如果没有安装,则不会输出任何内容(我希望它输出字符串 FALSE )
使用终端,最简单的方法是确定用户系统上是否安装了名为dcmdump
的二进制文件。如果已安装,我需要知道它的位置(例如/usr/local/bin
),如果未安装,则希望终端回显FALSE
。
我对终端脚本知之甚少,但输入以下内容:
command -v dcmdump
输出dcmdump安装的目录(如果已安装-非常好),但如果没有安装,则不会输出任何内容(我希望它输出字符串 FALSE )
$ which dcmdump 2>/dev/null || echo FALSE
||
表示)。左侧是命令which dcmdump 2>/dev/null
,右侧是echo FALSE
。which NAME
在当前shell的$PATH
中查找名为NAME
的可执行文件。如果找到一个,它将其绝对路径打印到标准输出并退出状态指示“成功”,否则,它可能会或可能不会将错误消息打印到标准错误输出,并返回表示“失败”的状态。which
的错误消息,而是想要自己的,因此我们使用2>/dev/null
将which
的标准错误输出重定向到黑洞/dev/null
。echo TEXT
只是将TEXT
输出到标准输出。如果您希望将FALSE
打印到标准错误输出,则可以使用echo FALSE >&2
进行重定向。which dcmdump
命令,使其返回/usr/local/bin/dcmdump
(如果找到该命令)不是完全错误的。但在其他环境中使用which
命令可能会有问题。which
命令的主要原因是它是一个单独的命令,而不是内置于shell中的,所谓的shell“builtins”是更好的选择,当它们可以像which
一样完成任务时。hash dcmdump
内置命令,并检查返回值;例如:echo $?
或:if hash dcmdump 2>/dev/null; then
echo "OK, you have dcmdump installed. We’ll use that."
else
echo "You need dcmdump. I can install if for you, OK?"
read -e -p "Y or N? " yn
if [[ "y" = "$yn" || "Y" = "$yn" ]]; then
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install dcmtk
else
echo "We need dcmdump. Stopping."
exit
fi
fi
对于检查命令是否存在的选项,没有一个返回字面字符串FALSE(正如您在问题中所要求的)。但是使用hash dcmdump
并检查返回值即可完成工作。
如果您确实想知道命令的确切位置,那么command -v
就可以给您。使用type dcmdump
也会以稍微不同的形式提供该信息。
无论如何,hash
、command -v
和type
都是shell内置命令,因此它们被推荐用于此,而不是which
。 SO上的规范答案提供了更多细节。
顺便说一句,如果您的目标是在系统上获得dcmdump
,则可以通过安装homebrew来实现:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
然后在此之后,您可以安装dcmtk
软件包:
brew install dcmtk
然后您将在/usr/local/bin/dcmdump
中拥有一个dcmdump
命令。
which
命令不是一个好主意,因此我认为 command -v
方法更好。问题是,我不知道如何在终端中编写 if...else 语句。 - Garry Pettethash
是最好的。我会更新我的答案。 - sideshowbarkercommand -v dcmdump || echo FALSE
if cmd=$(command -v dcmdump); then echo $cmd; else echo FALSE; fi
which
并检查返回值是否为 null,如下所示:#!/bin/sh
bi=$(which $1)
if [ -z $bi ]
then
echo "FALSE"
else
echo $bi
fi
然后可以像这样运行脚本:
./script command
FALSE
更有用?顺便说一下,终端只是一个终端枚举器;它只允许您输入和显示文本。它是 shell 提供了实际执行操作的能力。 - Keith Thompson