非常抱歉,这可能是其他人已经问过但似乎谷歌无法解决的问题。我试图弄清楚正在调用哪个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。
sh
和bash
不是同一个shell。当你指定错误的shell时,你为什么会指望它能工作呢? - Hasturkun#!/bin/sh
是一个好习惯,同时最好明确指定要使用的shell。 - jgr208sudo
之前执行$(SHELL)
,因为我首先收到了“-bash:SHELL:找不到命令”的提示,然后才出现输入密码的提示。所以我猜测bash在没有sudo
的情况下运行$(SHELL)
。 - ForceBrush
是Bourne Shell(兼容)shell,bash
是Bourne Again Shell,它有自己的特点。请参见https://dev59.com/g2025IYBdhLWcg3w6aUX#5725402。我的观点是,如果您正在使用`bash`功能,请使用`#!/bin/bash`。 - Hasturkun#!/bin/bash
或#!/usr/bin/env bash
的 shebang,一切都会正常工作。 - sotona