我使用自制软件在我的机器上安装了git,如下所示。
$ git --version
git version 1.7.3.4
我正在学习bash编程,我在〜/ .bashrc中有以下函数
function gitlab {
CMD= "git --version"
$CMD
}
然而,当我运行gitlab时,我得到以下输出
$ gitlab
-bash: git --version: command not found
我在mac上使用bash。
答案 0 :(得分:3)
您的问题是CMD=
之后的空格。评估结果为CMD=<empty string> "git --version"
。首先,将环境变量CMD
设置为空字符串,然后调用命令git --version
。请注意,由于"..."
,shell确实尝试使用参数git --version
执行命令git
而不是--version
。只需删除=
和"
之间的空格即可解决此问题。
答案 1 :(得分:2)
您将整个字符串作为单个命令运行。可以使用名为foo bar
的二进制文件(带空格),然后就像显示的那样运行它。
编辑:你究竟想做什么?在运行变量之前,无需在变量中存储命令:
gitlab() {git --version}
和
alias gitlab='git --version'
两者都与您对上述功能的期望相同。通常,建议在别名之上使用函数解决方案(并且不需要在其前面添加function
)。
答案 2 :(得分:0)
当您尝试将字符串=
分配给"git --version"
变量时,CMD
后面有一个多余的空格。 shell认为这是一个空字符串赋值给CMD
变量,该变量只对下一个命令是本地的。当您的命令引用"
时,shell会尝试执行名为git --version
的程序。由于没有这样的程序,它失败了。
您的函数几乎与以下函数一样被解释(错误在这里更容易看到):
function() {
CMD=
"git --version"
unset -v CMD
$CMD
}
您应该删除空格字符,使其按照您的意图进行解释。但是,有更简单的方法来做同样的事情:
function gitlab() {
git --version
}
如果你想要的是存储要存储在git --version
变量中的CMD
执行结果,你应该这样做:
function gitlab() {
VERSION="$(git --version)"
echo "$VERSION"
}
编辑:更正了我的回复,因为它不正确(@DarkDust发现错误)。