理解期望脚本shebang中“-f”标志的用途

时间:2014-10-13 10:20:02

标签: expect

希望脚本的Shebang通常是:

#!/usr/bin/expect -f

根据expect手册,-f标志仅在使用#时有用!符号,以便可以在命令行上提供其他参数。这是否意味着使用#!/usr/bin/expect -f shebang,expect会将脚本文件中的所有其他代码作为命令文件处理,并允许用户在命令行上指定其他命令,例如: /usr/bin/custom-expect-script.exp -c "debug 0; log_file /tmp/expect_log_file.log"

1 个答案:

答案 0 :(得分:4)

-f标志命名用于读取命令的文件,即脚本。交互式地,这似乎毫无意义。如果您说expect script,则假设您的意思是expect -f script

实际上,没有理由从命令行使用-f。它仅提供,因此可以从#!行使用:

#!/usr/local/bin/expect -f

--一样,当脚本以此-f行开始并且仅通过其名称(不带expect)调用时,其行为与您输入以下命令相同:

% expect -f script args

现在您可以使用-c之类的Expect标记,它们将被正确处理。由于-f script看起来像一面旗帜,Expect继续寻找并找到-c并将其解释为旗帜。

% echo.exp -c "set debug 1" foo bar 17

<强> echo.exp

#!/usr/bin/expect -f
if { $debug } { 
    puts "debugging on"
} else { 
    puts "turned off debugging"
}
puts $argc
lassign $argv x y z
puts "$x, $y and $z" 

定义了-f标志,脚本可以在没有expect的情况下从终端执行

 ./echo.exp -c "set debug 1" foo bar 17

否则,expect会抛出错误。

当然,缺点是如果你想将标志传递给你自己的脚本,那么你就是这样 还必须使用--。例如,假设您将自己的标记定义为-e-ZZ

% echo.exp -- -e -ZZ -c

-e-ZZ不是Expect已知的标志,但您仍必须使用 - 或者其他Expect 会告诉你,你曾使用过非法旗帜。

% echo.exp -e -zz -c
expect: illegal option -- e

来源:Exploring Expect