0

我正在尝试从我的 subversion 命令中获取版本号,以便我可以检查我们是否在 bash 脚本中加载了 write subversion 模块。

交互式地,这是一个示例使用:

> svn --version | head -n1 | grep -q '1.7'; echo $?
0

但是,当我将同一行(仅此而已)放在脚本中并运行脚本时:

> ./setup_svn.sh
1

此外,该脚本的运行速度明显快于交互式 shell 命令。有没有人知道我可能缺少什么来解释这个结果?


编辑

事实证明,我的交互式 bash 脚本使用了错误的 svn 命令。不知道究竟是为什么,但我认为这可能是 Unix StackExchange 的一个问题。

这几乎肯定与我们工作站上的模块系统有关,交互式运行我得到:

> module list
Currently Loaded Modulefiles:
...
12) subversion/1.7.7    
> which svn
/usr/bin/svn
> svn --version
svn, version 1.7.7 (r1393599)
...

在脚本中运行,我得到:

> ./setup_svn.sh
Currently Loaded Modulefiles:
...
12) subversion/1.7.7    
/usr/bin/svn
svn, version 1.6.17 (r1128011)
...

进一步编辑

似乎如果我启动一个新的 shell,我也会遇到同样的问题:

> bash
> module list
Currently Loaded Modulefiles:
...
12) subversion/1.7.7
> svn --version
svn, version 1.6.17 (r1128011)

我想我会找出我们的模块系统对环境做了什么,并用它来找出问题所在。

4

2 回答 2

1

我知道它不会纠正问题,但我认为 head 命令没用。您可以使用 --quiet 选项。

$ svn --version --quiet
1.7.5

编辑:

如果这是 konsolebox 提到的分号问题,您也可以使用以下语法:

echo $(svn --version --quiet | grep -q '1.7')$?
于 2013-09-17T16:41:09.697 回答
0

这可能是外壳处理分号的方式。试着放在两行。

#!/bin/sh
svn --version | head -n1 | grep -q '1.7'
echo "$?"

如果您也在 bash 中,请确保未启用 pipefail:

#!/bin/bash
shopt -u -o pipefail
svn --version | head -n1 | grep -q '1.7'
echo "$?"
于 2013-09-17T16:28:50.333 回答