2013-06-29 4 views
1

일부 패키지를 한꺼번에 설치하는 스크립트를 작성하려고합니다. catch는, 나는 파이썬의 확장과 같은 sage (http://www.sagemath.org)를 사용하고 있습니다. 내가 쉘 스크립트에 이러한 명령을 쓸 때셸 내에서 스크립트 실행

/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 쉘이 나간 후 easy_install 라인이 실행됩니다. 스크립트는 작성된대로 수행됩니다.

+0

나는 동의한다. 그러나 내가 원하는 것은 그것이 그것을 원하는대로 달릴 수있는 방법이다. – Chris

3

sage에 대한 man 페이지 나 다른 문서가이 문제를 특별히 다루지 않고 unix/linux/cygwin (ish) 셸을 사용한다고 가정하면 here-documents가 cmds를 현자를위한 스크립트. 또한 항상 쉘 스크립트의 첫 번째 라인 인 '그녀 - 쾅'라인으로 #!/bin/ksh 또는 #!/bin/sh 등을 사용할 수 있습니다

#!/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 

보십시오. 당신은

chmod 755 ./mySageTalkerScript.sh 

그리고 중 하나를 PATH 변수에 스크립트의 경로를 포함 시키거나 (chmod를 cmd를 참조) 상대 경로를 제공함으로써, 또는 전체로 만든 스크립트 파일을 실행해야합니다 경로, 당신은 코드에 더가 발생한 것을 나타 내기로

/path/to/script/mySageTalkerScript.sh 

을 IE와 코드를 들여 쓰기하여 모범 사례를 다음하는 경우, 당신은 들여 쓰기 위해 탭을 사용하여, 그들은 당신이

으로 전체 블록을 들여 수
#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-line 옵션을 찾으십시오. 그것은 현자가 std-in에서 읽지 않는 것일 수도 있습니다 (이것은 here-document이 사용하는 것입니다). sage이 std-in에서 읽을 수 있는지 확인하는 가장 기본적인 테스트는 echo exit | sage -sh입니다.

IHTH.

+0

세이지 셸의 스크립트를 통해'easy_install'이 작동한다는 것을 확인할 수 있습니다 (결국 쉘은 정상 쉘이므로 작동하지 않을 이유가 없습니다). – kcrisman