为啥我在 .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一下才有效,如何才能永远生效?
如何修复终端未在 OS X Lion 上加载 ~/.bashrc [关闭]
Linux终端里除了cd命令,其他命令都报没有那个文件或目录