2013-06-29 183 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