【发布时间】:2016-06-14 16:39:19
【问题描述】:
我很抱歉,因为这必须是其他人提出的问题,但似乎是谷歌证明。我正试图弄清楚调用了什么 shell,因为我遇到了不一致。如果我sudo,我的脚本不起作用,但如果我sudo bash,它确实有效。然而,当我sudo echo $0 时,它说的是 bash。
cpu=$(cat /proc/cpuinfo | grep Revision | cut -d' ' -f 2-);
if [[ "a22082" = $cpu || "a02082" = $cpu ]]; then
echo 'do stuff';
fi
如果我用 #!/bin/sh 指定命令解释器,它仍然会失败,但更具体的是 #!/bin/bash 它会失败。
我(现在)知道[[ 是特定于 bash 的,但尽管得到了响应,但它似乎不像 sudo 的默认 shell 是 bash。
【问题讨论】:
-
sudo echo $(SHELL)?也许这可能会有所帮助 -
等等,我假设
sh和bash不是同一个shell。当您指定错误的 shell 时,为什么希望它能够工作? -
我个人总是发现将
#!/bin/sh用于shebang,并发现使用确切的shell 是更好的做法。 -
@jgr208:
sh是 Bourne Shell(兼容)shell,bash是 Bourne Again Shell,它有自己的特性。见stackoverflow.com/a/5725402。我的观点是,如果您使用bash功能,请使用#!/bin/bash -
只需将 shebang(如
#!/bin/bash或#!/usr/bin/env bash)放在脚本的开头,一切都会正常进行。