Yal*_* T. 6 shell bash shell-script
所以我想在 Linux 机器上安装 Etherpad lite。如果我尝试运行它,我会得到错误:
“请安装 node.js ( http://nodejs.org )”
该命令which node为我提供了节点 js 的正确路径。所以我进入了 Etherpad Lite 的 .sh 文件,发现了这个:
#Is node installed?
hash node > /dev/null 2>&1 || {
echo "Please install node.js ( http://nodejs.org )" >&2
exit 1
}
Run Code Online (Sandbox Code Playgroud)
我想这意味着:检查节点 --> 如果没有可用的打印行并退出。但是这段代码到底做了什么?哈希有什么作用?所有这些&和>?
谁能向我解释这 3 行,将不胜感激?
当您在 bash shell 中键入命令时,shell 会在整个 $PATH 变量中查找这些命令。哈希只是您键入的命令以及在何处找到它们的索引,以帮助加快下次查找它们的速度。
注意: @Anthon 的答案给出了哈希是什么的一个很好的定义!
例如,如果您仅运行hash不带参数的命令,您将获得之前找到的命令以及它们被使用的次数(即:点击)的列表:
% hash
hits command
2 /usr/bin/host
1 /bin/more
1 /home/saml/bin/autossh_mail.sh
3 /usr/bin/zip
2 /bin/rm
2 /bin/date
2 /usr/bin/vim
1 /usr/bin/htop
2 /bin/mv
3 /bin/ps
8 /usr/bin/ssh
1 /usr/bin/yum
1 /usr/bin/xfreerdp
1 /bin/cp
2 /bin/mkdir
4 /usr/bin/man
1 /usr/bin/gvim
1 /usr/bin/unzip
1 /usr/bin/w
5 /usr/bin/nslookup
51 /bin/ls
15 /usr/bin/find
Run Code Online (Sandbox Code Playgroud)
该命令hash node返回一个状态值(0 或 1),具体取决于该值是否存在于哈希列表中:
hash node不在我的名单上% hash node
bash: hash: node: not found
% echo $?
1
Run Code Online (Sandbox Code Playgroud)
注意:任何先前运行的命令的状态都临时存储在环境变量$? 。这是在执行每个命令后放置状态(0 = 成功,1 = 失败)的位置。
构造“cmd1”|| { "cmd2" ... } 是一个 or 语句。在这里思考和/或从逻辑出发。所以这意味着做第一件事,如果失败,那么做第二件事,否则不做第二件事。
% true && echo "1st cmd ret. 1" || echo "1st cmd ret. 0"
1st cmd ret. 1
% false && echo "1st cmd ret. 1" || echo "1st cmd ret. 0"
1st cmd ret. 0
Run Code Online (Sandbox Code Playgroud)
逻辑总是令人困惑(至少对我来说),因为返回 1 表示命令失败,而返回 0 表示命令运行成功。
| 归档时间: |
|
| 查看次数: |
4585 次 |
| 最近记录: |