为啥我在 .bashrc 中使用 `uname` 时会出现错误?

Posted

技术标签:

【中文标题】为啥我在 .bashrc 中使用 `uname` 时会出现错误?【英文标题】:Why am I getting an error when I use `uname` in my .bashrc?为什么我在 .bashrc 中使用 `uname` 时会出现错误? 【发布时间】:2012-06-05 02:37:20 【问题描述】:

在我的 .bashrc 中,我有以下代码

if [`uname` == "Linux"]; then
    echo "It worked"
else
    echo "It didn't work"
fi

但是当我获取我的 .bashrc 时,我得到以下结果

[Linux:找不到命令

没用

奇怪的是,[ 不是错字,它是错误的一部分。如果我注释掉 if 语句,那么错误就会消失,所以我很确定它是错误的根源。另外,如果我将Linux 更改为linux,则错误也会更改为小写。

如果我回显 uname,我会得到 Linux。

为了获取我的 .bashrc,我使用了 source .bashrc,并且还通过在命令行终端上输入 bash 开始了一个新的 bash 会话。

我认为检查操作系统类型并不难,但我似乎无法找出 .bashrc 的正确语法。

我看不出我做错了什么,有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

您忘记了方括号后面的空格。第一行必须如下所示:

if [ `uname` == "Linux" ]; then

在您的版本中,没有空格,[uname 的输出被连接成一个名为[Linux 的可执行文件,该文件不存在于PATH 中。

【讨论】:

愚蠢的我。谢谢,我应该已经明白了。 +1 用于回答 OP 的隐含问题“为什么”,而不仅仅是显示正确的语法。我唯一要改变的是 Bash 并不是说​​[Linux 不存在;这是说在PATH中找不到它。细微的区别,但可能对 OP 以外的人很重要。 @Florian - P.S.谢谢你对你的回答很好。我在许多论坛上发现,当我们犯愚蠢的错误时,人们会对像我这样的初学者非常刻薄。【参考方案2】:

对间距很挑剔。您的条件中需要空格

if [ `uname` == "Linux" ]; then
    echo "It worked"
else
    echo "It didn't work"
fi

【讨论】:

以上是关于为啥我在 .bashrc 中使用 `uname` 时会出现错误?的主要内容,如果未能解决你的问题,请参考以下文章

linux下.bashrc为啥每次打开终端都要source一下才有效,如何才能永远生效?

为啥ubuntu打开终端之后没有命令行提示符

如何修复终端未在 OS X Lion 上加载 ~/.bashrc [关闭]

Linux终端里除了cd命令,其他命令都报没有那个文件或目录

找出为啥 Mingw64 编译的应用程序无法在特定端口上绑定套接字?

ubuntu12.04编译交叉编译已经安装,为啥还不能编译