我正在运行一个安装服务的脚本。它有几个read
命令。
我想将它作为更大的安装脚本(实际上是 capistrano,但这并不重要)的一部分来运行,并用值预填充“读取”部分,而不是阻止整个过程。
该脚本使用单个命令运行,比如说blah/bin/blah install
,我想在命令上提供输入,例如input first_input, second_input | blah/bin/blah install
脚本的相关部分:
if [[ $NEO4J_USER == $wrapper_user ]]; then
default_user=$wrapper_user
else
default_user="neo4j"
fi
######### read:
read -p "Graph-like power should be handled carefully. What user should run Neo4j? [$default_user] " proposed_user
proposed_user=${proposed_user:-$default_user}
if ! `id $proposed_user &> /dev/null` ; then
######### read:
read -p "User \"$proposed_user\" does not yet exist. Shall I create the account for you? [Yn]" yn
case $yn in
[Nn]* ) echo "WARNING: Alright, but Neo4j will fail to launch until that user has been created."
set_user $proposed_user
;;
* ) create_user $proposed_user
;;
整个脚本位于http://pastebin.com/RpJZciXq
我知道我可以更改脚本,但我只想预填充值。可以吗?
事实上,我使用 Capistrano 确实很重要,因为它能够发送输入(参见&block
章节)。
但有趣的是,想知道我提到的功能是否也存在于 bash 中。
答案1
read
默认从 stdin 读取。只需在那里输入一些内容即可。
echo -e '\n\n' | blah/blah/blah install
blah/blah/blah install <<< $'\n\n'