命令在 shell 中工作但不在脚本中工作

命令在 shell 中工作但不在脚本中工作

我有这个 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

shManjaro 安装上的 shell 可能是,dash它不理解[[ ... ]]语法,也不理解+=用于附加到变量值的语法。

sh这可以解释为什么当脚本使用而不是使用运行时,脚本中的那些特定行无法正确执行bash

为了缓解这种情况,请确保 hash-bang 行 ( #!) 指向 的正确路径bash,并使用 使脚本可执行chmod +x scriptname.sh。这样您就可以使用 eg 运行脚本,./scriptname.sh而不必明确告诉它使用bash

相关内容