13

我开发并维护了一个名为 Githug 的 ruby​​ gem,我正在尝试为它编写一个自动化测试脚本。Githug 基本上是操纵一个目录,将其放入工作 git 存储库的不同状态,您可以执行 git 命令来“解决”该级别。

其中一个级别要求您提供 git 配置详细信息,我正在执行以下操作:

#! /bin/sh
# ...snip
#level 4
FULL_NAME=$(git config --get user.name)
EMAIL=$(git config --get user.email)
echo -e "$FULL_NAME\n$EMAIL" | githug

当我从 bash 脚本执行时,它 (echo -e) 不起作用。但是当我从终端运行它时它确实如此。

FULL_NAME=$(git config --get user.name)
EMAIL=$(git config --get user.email)
echo -e "$FULL_NAME\n$EMAIL" | githug
********************************************************************************
*                                    Githug                                    *
********************************************************************************
What is your name? What is your email?
Congratulations, you have solved the level

为什么这在 bash 脚本中不起作用?

谢谢。

4

2 回答 2

16

错误的shebang:

#! /bin/sh

当它应该是一个 bash 脚本时,使用

#! /bin/bash

Bash 有一个内置的 echo,它与 /bin/echo 不是 100% 相同的。

于 2012-04-22T12:19:16.393 回答
0

如评论所述,printf首选选项,如 Git 2.14.x/2.15 (Q4 2017) 中所示

printf '%s\n%s' "$FULL_NAME" "$EMAIL"

请参阅Torsten Bögershausen ( )的提交 1a6d468(2017 年 9 月 17 日) 。(由Torsten Bögershausen 合并 -- --提交 1a6d468中,2017 年 9 月 21 日)tboegi
tboegi

test-lint: echo -e(or -E) 不可移植

一些实现echo支持 ' -e' 选项以启用对以下字符串的反斜杠解释。
另外,他们支持 ' -E' 来关闭它。

然而,这些都不是可移植的,POSIX 甚至没有提到它们,而且许多实现不支持它们。

' ' 的检查-n已在 中完成check-non-portable-shell.pl,将其扩展到覆盖 ' -n'、' -e' 或 ' -E'。

于 2017-09-28T20:01:13.420 回答