我有这个 git 脚本,它为我提供了我正在使用它的 python 程序所需的输出。问题是,该脚本在我需要使用它的 Debian 7 机器上不起作用。不过,它在我的 Manjaro PC 上运行没有问题。
#!/bin/bash
branch=$1
if [[ -n "$branch" ]]; then
format=Author:%x09%an
format+=%x0aDate:%x09%ad
format+=%x0aRefs:%x09%d
format+=%x0a%x0a'%w(,4)%s'
format+=%x0a%x0a'%w(,4,4)%b'
git rev-list --pretty="$format" $branch
else
echo "argument error"
fi
当我自己输入命令时,它也可以工作。
有人可以帮我解决这个问题吗?
编辑:我得到的第一个错误是关于 2 [[。如果我将其更改为,if [ -n "$branch" ];
那么它将继续进行格式声明,其中每一行都会出现“未找到”错误。然而 git rev-list 命令可以工作,但由于没有参数而失败。
编辑2:通过执行脚本bash [script]
而不是sh [script]
解决问题!我仍然想知道为什么它可以在我的 Manajaro 机器上运行sh
。
答案1
sh
Manjaro 安装上的 shell 可能是,dash
它不理解[[ ... ]]
语法,也不理解+=
用于附加到变量值的语法。
sh
这可以解释为什么当脚本使用而不是使用运行时,脚本中的那些特定行无法正确执行bash
。
为了缓解这种情况,请确保 hash-bang 行 ( #!
) 指向 的正确路径bash
,并使用 使脚本可执行chmod +x scriptname.sh
。这样您就可以使用 eg 运行脚本,./scriptname.sh
而不必明确告诉它使用bash
。