我有一个脚本(来自供应商,用于掩盖密码),它通过一系列用户输入并根据输入生成一些输出。我想能够包装另一个脚本,从文本文件中提取输入,然后捕获输出以便日后使用。有人有这方面的示例吗?
更新:我进行了一些调查,发现shell脚本启动了一个Java进程,这就是请求用户输入的原因。对于此情况,xargs、<、>、|似乎无法正常工作。
更新:我进行了一些调查,发现shell脚本启动了一个Java进程,这就是请求用户输入的原因。对于此情况,xargs、<、>、|似乎无法正常工作。
myscript < input_file > output_file
(通过命令行)将逐行读取input_file
的内容,就像它是用户输入一样,然后将输出写入到output_file
中。但要注意,如果output_file
已经存在,它将会被完全覆盖而没有任何警告。
您可以尝试使用“expect”程序,它作为大多数Linux发行版的软件包可用。它使用简单的脚本语言来提供交互式程序。一个示例脚本可以像这样:
#!/usr/bin/expect
spawn passwordmanager
expect "Enter password for testuser:"
send "verysecret123"
这个脚本会告诉expect
启动程序passwordmanager
,然后等待提示符Enter password for testuser:
,并用verysecret123
来回答它,以此类推。
你觉得使用一个 shell 函数怎么样?
function script_plus ()
{
if [ $# != 2 ]; then echo "usage: ..."; exit; fi
src=$1;
tgt=$2;
if [ ! -f $src ]; then echo "usage: ..."; exit; fi
cat $src | xargs script > $tgt
}
"$src"
而不是src
——但更根本的是,我不认为 script_plus FOO BAR
比 script < FOO > BAR
更好,我也不认为这种方法值得推荐。 - ruakhxargs
绝对不是 OP 需要的。现有脚本不会将这些内容作为命令行参数;相反,它“遍历一系列用户输入”。 - ruakh
expect
(http://expect.sourceforge.net/)网站。 - Sean Bright