无法获取简单的bash脚本

问题描述 投票:0回答:3

我理解在SO中多次询问类似的问题。但是,我在这里找不到任何常见的嫌疑人。

#!/bin/bash
myvar="test"
if [ "$myvar" == "test" ]
then
echo "Test mode"
fi

花了不少时间。任何人都可以建议我错过了什么?

我能够执行脚本,但无法获取相同的源。

bash: test.sh: line 7: syntax error: unexpected end of file时出错

$ which bash
/bin/bash
$ bash --version
3.2.57(1)

我可以在另一台Mac上运行相同的工作。所以,我的Mac上出现了一些错误,但无法弄清楚它是什么。此外,不仅上面提到的脚本,任何具有“if”条件的脚本我都无法获取。试过提到here的不同例子,语法错误相同。

EDIT1

$ file test.sh 
test.sh: Bourne-Again shell script text executable, ASCII text

Aaditi:

$ hexdump -C test.sh
    00000000  23 21 2f 62 69 6e 2f 62  61 73 68 0a 6d 79 76 61  |#!/bin/bash.myva|
    00000010  72 3d 22 74 65 73 74 22  0a 69 66 20 5b 20 22 24  |r="test".if [ "$|
    00000020  6d 79 76 61 72 22 20 3d  3d 20 22 74 65 73 74 22  |myvar" == "test"|
    00000030  20 5d 0a 74 68 65 6e 0a  65 63 68 6f 20 22 54 65  | ].then.echo "Te|
    00000040  73 74 20 6d 6f 64 65 22  0a 66 69 0a              |st mode".fi.|
    0000004c
linux bash shell scripting
3个回答
1
投票

检查换行符字符差异或编码页面。如果它像这样简单并且涉及到mac,请始终先检查它


0
投票

正如其他用户已经说过的那样,您可以检查换行是否为LF,因为CRLF将在linux中失败。如果您转换脚本,它应该是固定的。你可以安装一个可以将CRLF转换为LF的工具:

dos2unix test.sh

关于采购,不确定这是否可以帮助您解决问题。假设没有从bash调用源代码test.sh的包装器脚本...

#!/bin/sh
. ./test.sh

... if语句将失败,因为bourne shell不支持'=='但是如果你将它改为...

#!/bin/bash
myvar="test"
if [ "$myvar" = "test" ]

...脚本将无误地获取。请注意,这取决于脚本的来源,可能会忽略shebang


0
投票

好的,最后发现了这个问题。

我删除了我的.bashrc文件,工作正常。看起来像.bashrc中的东西搞砸了。

$ source test.sh
Test mode

谢谢,大家都很感激。

© www.soinside.com 2019 - 2024. All rights reserved.