2012-02-04 52 views
0

我从我的MacBook Pro打开“终端”,并尝试从书“猛砸指南入门”运行一些bash脚本:如何在macbook pro上运行bash脚本?

首先我检查PATH环境设置和当前工作文件夹,其中包含一个脚本“SCRIPT1 .SH“:

unknown_b8-8d-1b-3d-0b-3d:myscript liuren$ echo $PATH 
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin 
unknown_b8-8d-1b-3d-0b-3d:myscript liuren$ pwd 
/Users/liuren/Documents/myscript 
unknown_b8-8d-1b-3d-0b-3d:myscript liuren$ ls 
script1.sh 

然后我设置的路径,包括当前工作文件夹,它似乎成功了:

unknown_b8-8d-1b-3d-0b-3d:myscript liuren$ export PATH="$PATH:/Users/liuren/Documents/myscript" 
unknown_b8-8d-1b-3d-0b-3d:myscript liuren$ echo $PATH 
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/Users/liuren/Documents/myscript 

,但是我不能让 ”script1.sh“ 运行:

unknown_b8-8d-1b-3d-0b-3d:myscript liuren$ script1.sh 
#: bad interpreter: No such file or directoryt1.sh: /bin/bash 

unknown_b8-8d-1b-3d-0b-3d:myscript liuren$ ./script1.sh 
#: bad interpreter: No such file or directory 

剧本其实很简单,从 “猛砸指南入门”:

#!/bin/bash 
# This script clears the terminal, displays a greeting and gives information 
# about currently connected users. The two example variables are set and displayed. 
clear       # clear terminal window 
echo "The script starts now." 
echo "Hi, $USER!"    # dollar sign is used to get content of variable 
echo 
echo "I will now fetch you a list of connected users:" 
echo 
w        # show who is logged on and 
echo       # what they are doing 
echo "I'm setting two variables now." 
COLOUR="black" 
VALUE="9" 
echo "This is a string: $COLOUR" 
echo "And this is a number: $VALUE" 
echo 
echo "I'm giving you back your prompt now." 
echo 

,居然有 “/斌/庆典”:

unknown_b8-8d-1b-3d-0b-3d:myscript liuren$ cd /bin 
unknown_b8-8d-1b-3d-0b-3d:bin liuren$ ls 
[  df  launchctl pwd  tcsh 
bash  domainname link  rcp  test 
cat  echo  ln  rm  unlink 
chmod  ed  ls  rmdir  wait4path 
cp  expr  mkdir  sh  zsh 
csh  hostname mv  sleep 
date  kill  pax  stty 
dd  ksh  ps  sync 
unknown_b8-8d-1b-3d-0b-3d:bin liuren$ 

使用其他方法运行它,它显示没有结果

unknown_b8-8d-1b-3d-0b-3d:myscript liuren$ source script1.sh 
unknown_b8-8d-1b-3d-0b-3d:myscript liuren$ bash script1.sh 
unknown_b8-8d-1b-3d-0b-3d:myscript liuren$ bash -x script1.sh 

我想这是行不通的。我该如何解决这个问题?

ps。这个“unknown_b8-8d-1b-3d-0b-3d”是什么,是否有可能将它改为更有意义的东西?

+0

看起来你可能在shebang行有一个奇怪的控制字符。当你运行时你会得到什么:sed 1q script1.sh | xxd – 2012-02-04 05:44:16

+0

这可能与实际答案无关,但不应在PATH变量中加引号。你应该像这样设置它:export PATH = $ PATH:/ Users/liuren/Documents/myscript – 2012-02-04 05:47:19

+0

它没有引用它的作品,但似乎用引号它也可以使它? – athos 2012-02-04 06:08:48

回答

1

我以前见过这个,当shebang行具有DOS风格line endings(通常当它在Windows PC上创建时)。

如果你这样做cat -vet ./script1.sh,你可能会看到:

#!/bin/bash^M$ 
[...] 

删除那些回车,你会被设定。要做到这一点

一种方法是:

tr -d '\r' <./script1.sh> ./script2.sh 

...这将创建一个新文件(./script2.sh)未经回车。

如果您./script2.sh可执行文件(chmod +x ./script2.sh),你应该能够运行(而无需更新${PATH},它通常是一个糟糕的计划,有当前目录中的${PATH}”,

找出所有提示符的(unknown_b8-8d-1b-3d-0b-3d:myscript liuren$)的元素,,使用:

echo $PS1 

这将包含像\w字符,其被扩展到当前工作目录中,f或例子。

您可以在Bash Reference Manual中查看这些代码的完整列表。

快乐脚本!

+0

首先将DOS样式的行结尾放在OS X上的文件中是令人印象深刻的部分。 – geoffspear 2012-02-04 05:42:59

+0

@Wooble:可能是下载的。 – Johnsyweb 2012-02-04 05:45:35

+0

或者也许光盘上的脚本具有DOS风格的结局? – 2012-02-04 05:51:19