Bash sh - 命令未找到。

21
#!/bin/bash
cd ~/workspace/trunk;
svn up;

当我在命令行中运行./build.sh时,会显示以下信息:

: command not found

然而什么都没有发生。我该如何解决?

5个回答

56

我解决了添加执行权限的问题:

sudo chmod +x file.sh


1
工作了。这应该是被接受的答案。 - Francisco d'Anconia

18

我已经解决了这个命令的错误。


sudo chmod +x build.sh

15

我猜测你的文件中可能存在不能打印的控制字符,或者它具有 \r\n(CRLF)行结束符(dos/windows 模式)。

尝试使用以下命令进行检查:

$ hexdump -C build.sh 
00000000  23 21 2f 62 69 6e 2f 62  61 73 68 0a 63 64 20 7e  |#!/bin/bash.cd ~|
00000010  2f 77 6f 72 6b 73 70 61  63 65 2f 74 72 75 6e 6b  |/workspace/trunk|
00000020  3b 0a 73 76 6e 20 75 70  3b 0a                    |;.svn up;.|
0000002a

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

$ unix2dos build.sh 
unix2dos: converting file build.sh to DOS format ...

$ hexdump -C build.sh 
00000000  23 21 2f 62 69 6e 2f 62  61 73 68 0d 0a 63 64 20  |#!/bin/bash..cd |
00000010  7e 2f 77 6f 72 6b 73 70  61 63 65 2f 74 72 75 6e  |~/workspace/trun|
00000020  6b 3b 0d 0a 73 76 6e 20  75 70 3b 0d 0a           |k;..svn up;..|
0000002d

$ file build.sh 
build.sh: Bourne-Again shell script, ASCII text executable, with CRLF line terminators

5
我打赌5美元,它真的是build.sh,但biuld.sh的例子很棒:D - eis
我刚刚使用了 OP 的文件名:P 是的,我打赌它也是 build.sh - KurzedMetal

11

除了以下这个方法,以上的方法在我这里都不起作用。

sudo ./build.sh

7

去除脚本行末尾的 ; 符号。

在我的bash中没有这种情况,所以我不确定具体是什么问题,但我猜测可能是这样:

; 是命令的分隔符。由于您的最后一条命令以 ; 结尾,因此您的bash可能期望在之后再有另一条命令。然而,由于脚本已经完成,它读取了一个空命令,这是无法执行的。


3
虽然分号不必要,但它们并没有引起此处所述的问题——最坏情况是,如果您在两个命令终止符旁边放置了两个分号,则会出现语法错误。 - Charles Duffy
@CharlesDuffy,很可能是他的bash版本不同,可能期望在“;”之后输入其他内容。由于错误没有发生在我的bash中,所以我不知道OP使用的是哪个bash版本。错误消息指示“<nothing>: command not found”,这意味着他的bash确实尝试执行“<nothing>”! - Shahbaz
1
不一定是 <nothing> -- 更可能的是,它试图执行 $'\r',这只是简单地 渲染 为无。 - Charles Duffy
@DennisWilliamson,不,错误消息用双引号括起来,很可能是由OP完成的。消息末尾还有一个" - Shahbaz
这个答案是完全错误的。当脚本使用正常(UNIX格式)的行结尾时,尾随的;是无害的--你可以轻松地自行测试。只有DOS行结尾才会触发此错误。 - Charles Duffy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接