2012-02-04 51 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