2

我想使用单个 shell 脚本来执行一堆命令。其中一些命令包括:​​scp、cd、tar、date、expect、spawn。

当我声明 #!/bin/sh 或 #!/bin/bash 时,任何期望命令都不起作用 - 这是可以理解的。当我声明 #!/usr/bin/expect -f 然后 cd, tar, date 不起作用 - 我想这也是可以预料的(没有双关语)。

是否可以使用单个解释器使用所有这些命令,或者我可以在此过程中声明另一个?我潜入子壳,但没有成功。

4

2 回答 2

3

您可以expect通过 shell here-doc 提供命令:

#!/bin/sh
# shell code....
expect <<EOS
# expect code...
EOS
# back to shell code...
于 2013-02-07T03:35:54.170 回答
1

实际上,如果您在 expect 下运行,您将拥有Tcl 的所有命令,因此:

  • "cd" 可以工作,因为它是内置的
  • 不需要“日期”,因为您可以使用 Tcl 时钟命令,例如。clock format [clock seconds]
  • “tar”和其他外部命令可以用 exec 运行,例如。exec tar cf stuff.tar file1 file2 file3

数据和控制结构与 sh 或 bash 不同,但一旦你习惯了它们就会更强大。

于 2013-02-07T08:39:19.757 回答