2012-06-01 77 views
3
#!/bin/bash 
cd ~/workspace/trunk; 
svn up; 

当我运行./build.sh形式的命令行,它说:庆典SH - 找不到命令

: command not found 

并没有任何反应。我该如何解决这个问题?

回答

5

从脚本行末尾删除;

这并不在我的bash发生,所以我不知道究竟是错的,但我的猜测是这样的:

;是命令的分隔符。由于您的最后一条命令在;结束,因此您的bash可能会期待其他命令。但是,由于该脚本完成,它将读取一条空的命令,它不能执行。

+3

虽然分号是不必要的,它们实际上并不造成这里给出的问题 - 最糟糕的情况是,如果您有两个命令终止标记彼此相邻,则会出现语法错误。 –

+0

@CharlesDuffy,可能。但是,我不知道OP使用什么bash。既然这个错误没有发生在我的bash中,我的猜测是他的版本是不同的,可能期望在';'之后出现。该错误消息表示':命令未找到,这意味着他的bash确实尝试执行''! – Shahbaz

+1

不一定是'' - 更可能的是,它试图执行'$'\ r'',它只是简单地表示为_renders_。 –

8

我的猜测是你在文件中有无法打印的控制字符,或者它有\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

+0

我很喜欢OP的文件名:P是的,我敢打赌它是'建立.sh' – KurzedMetal

4

我解决了添加执行权限:

sudo chmod +x file.sh

+3

对你有好处,但不是对这个特定问题的回答。 – tripleee