2013-02-07 66 views
2

我想使用單個shell腳本來執行一堆命令。其中一些命令包括:​​scp,cd,tar,date,expect,spawn。在linux shell腳本中使用多個命令解釋器

當我聲明#!/ bin/sh或#!/ bin/bash時,任何expect命令都不起作用 - 這是可以理解的。當我聲明#!/ usr/bin/expect -f然後cd,tar,date不起作用 - 我想這也是預期的(無雙關)。

是否可以使用所有這些命令使用單個解釋器,或者我可以一路宣佈另一個?我潛入子彈,但沒有成功。

+0

我建議爲每個源文件編寫一種語言。將期望的代碼放入預期失敗並從Bourne或Bash腳本中調用。你可以只有一個[shebang](http://en.wikipedia.org/wiki/Shebang_(Unix))行。 – Johnsyweb

回答

3

您可以通過shell這裏-DOC喂expect命令:

#!/bin/sh 
# shell code.... 
expect <<EOS 
# expect code... 
EOS 
# back to shell code... 
+0

+1。你只需要小心引用,以確保bash不會試圖擴大你的期望變量。引用heredoc分隔符有助於實現這一點:'expect <<'EOS'' - http://www.gnu.org/software/bash/manual/bashref.html#Here-Documents –

+0

謝謝大家你的。我現在有很多選擇。 – jasonsfa98

1

其實,如果你運行在期待,你有all the commands of Tcl使用,因此:

  • 「CD」 會工作,因爲它的內置
  • 「日期」是不需要的,因爲你可以使用Tcl時鐘命令,例如。 clock format [clock seconds]
  • 「tar」和其他外部命令可以使用exec運行,例如。 exec tar cf stuff.tar file1 file2 file3

數據和控制結構不同於sh或bash,但是一旦習慣了它們,它就會更強大。