2013-06-29 236 views
1

我想寫一個腳本來一次安裝一些軟件包。趕上是,我使用鼠尾草(http://www.sagemath.org),這就像蟒蛇的延伸。當我在一個終端來的,我要做的就是類型:從一個shell中運行腳本

/Applications/sage/sage -sh #to get into sage shell 
easy_install -U distribute #to install package 
exit #to get out of sage shell 

然而,當我寫下這些命令放到腳本將它打開聖人外殼和等待。當我退出時,它會轉到下一個安裝分發的命令。我如何獲得它在sage shell中運行easy_install命令?

回答

0

sage shell是一個在前臺運行的進程,並且由於腳本的順序特性,sage shell必須在腳本的下一行執行之前完成運行。在sage shell退出後,easy_install行被運行。腳本按照書面執行。

+0

我同意,但我問的問題是如何讓它以我想要的方式運行。 – Chris

3

假設手冊頁或其他文檔爲鼠標並不具體解決此問題,並且您使用的是unix/linux/cygwin(ish)shell,您可能會發現此處文檔將從聖人的腳本。嘗試

#!/bin/bash 

#to get into sage shell 
/Applications/sage/sage -sh <<EOS 
    easy_install -U distribute #to install package 
    exit #to get out of sage shell 
EOS 

您還可以使用#!/bin/ksh#!/bin/sh和他人,始終是一個shell腳本的第一行的「她 - 砰」的線。你需要做的腳本文件的可執行文件,與

chmod 755 ./mySageTalkerScript.sh 

,要麼包含路徑到PATH變量的腳本,或者通過提供一個相對路徑(如圖所示CHMOD CMD),或全路徑,即

/path/to/script/mySageTalkerScript.sh 

正如你表明有更多的代碼,如果你是通過縮進的代碼之後的良好做法,並使用標籤的縮進,它們可以用

縮進整個街區
#to get into sage shell 
    /Applications/sage/sage -sh <<-EOS 
     easy_install -U distribute #to install package 
     exit #to get out of sage shell 
    EOS 

注意' - '字符現在在<<-EOS之間添加。如果您不使用-EOS,則必須確保關閉EOS位於左邊緣。無論哪種情況,您都需要確保EOS是唯一的行。最後,EOS可以是任何字符串,有些人使用!,但是我發現使用像EndOfScript,EndOfData(EOS,EOD)這樣的縮寫來減少混淆。

如果sage對此沒有響應,請嘗試刪除-sh,或查找對此上下文有意義的其他cmd行選項。它可能是(我會認爲這是一個錯誤),聖人不讀取std-in(這是here-document使用的是什麼)。查看sage可以從std-in讀取的最基本測試是echo exit | sage -sh。 IHD。

IHTH。

+0

我可以證實這個工程可以讓'easy_install'通過Sage shell腳本工作(畢竟這只是一個普通的shell,所以沒有理由不工作)。 – kcrisman