#!/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"
?
答案 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