我读了很多关于将管道标准输入传递给bash读取函数的内容,但似乎没有什么能适用于我的bash版本!!
GNU bash,版本3.2.51(1)-release(x86_64-suse-linux-gnu)
我有一个bash脚本,在某些时候用变量CONTINUEQUESTION询问用户“是/否”:
echo "Do you want to continue? (yes/no):"
read CONTINUEQUESTION
tmp=$(tr '[:upper:]' '[:lower:]' <<<$CONTINUEQUESTION)
if [[ "$tmp" != 'y' && "$tmp" != 'yes' ]]; then
echo "Aborting because of input '$CONTINUEQUESTION'"
exit
fi
我想在没有用户输入的情况下向这个问题输入“是或否”! 是的我知道我可以使用expect,但在这种情况下我不喜欢它。
所以我尝试了几件事:
CONTINUEQUESTION='yes'
echo $CONTINUEQUESTION | ./myscript.sh
因输入'
而中止./myscript.sh <<< "$CONTINUEQUESTION"
因输入'
而中止......还有很多其他的,没什么用的!?
O.k。现在我做了一点反转思考,并发现下面的行导致了管道的问题...因为当我说出来时,所有下面的答案都工作得很好,但是当执行这一行时没有:
running=`ssh root@${HOSTNAME} 'su - root -c "/bin/tools list | grep \"system running\"" 2>&1'`
但是,在阅读之前我需要这一行!我需要什么才能扭转2&gt;&amp; 1 ????
我的脚本看起来像是这样,并且在没有尝试过来的情况下工作用户干预:
LIST_FILE_NAME=$1
STILL_RUNNING=0
running=`ssh root@${HOSTNAME} 'su - root -c "cat '$LIST_FILE_NAME' | grep \"system running\"" 2>&1'`
if [[ $running =~ .*running.* ]]; then
STILL_RUNNING=1
echo "NODE $NODE running stop before continuing."
fi
if [ $STILL_RUNNING -eq 1 ]; then
echo "Aborting system was still running!"
exit 1
fi
echo "Do you want to continue? (yes/no):"
read CONTINUEQUESTION
tmp=$(tr '[:upper:]' '[:lower:]' <<<$CONTINUEQUESTION)
if [[ "$tmp" != 'y' && "$tmp" != 'yes' ]]; then
echo "Aborting because of input '$CONTINUEQUESTION'"
exit
fi
echo "o.k."
4分:
如果用户在问题上进行交互,则此bash运行良好!
谢谢你的时间!!!
答案 0 :(得分:3)
你的行
$CONTINUEQUESTION='yes'
应该是
CONTINUEQUESTION='yes'
我不确定你是否正在用“是”这个词喂养标准差。您可以在echo
之后添加read
以确定。
答案 1 :(得分:2)
考虑这种变化:
#!/bin/bash
read -p "Do you want to continue? (yes/no): " CONTINUEQUESTION
if [[ $CONTINUEQUESTION != [Yy] && $CONTINUEQUESTION != [Yy][Ee][Ss] ]]; then
echo "Aborting because of input '$CONTINUEQUESTION'."
exit
fi
经过测试:
bash script.sh <<< yes
如果它不起作用,请显示输出:
bash -x script.sh <<< yes
答案 2 :(得分:0)
您可以使用heredoc:
bash -ex ./myscript.sh << 'EOF'
yes
EOF
在Here Documents
中搜索man bash
。
编辑:根据评论,您可以使用此ssh
命令:
running=$(ssh -t -t root@${HOSTNAME} "grep 'system running' \"$LIST_FILE_NAME\"")