bash中的“允许”操作读取while循环

时间:2015-07-16 14:51:13

标签: bash shell jenkins

我有一个文件text.txt,其中包含两行。

first line
second line

我试图使用以下循环在bash中循环:

while read -r LINE || [[ -n "$LINE" ]]; do
   # sed -i 'some command' somefile
   echo "echo something"
   echo "$LINE"
   sh call_other_script.sh

   if  ! sh some_complex_script.sh   ; then
        echo "operation failed"
   fi

done <file.txt

致电some_complex_script.sh 时,仅处理第一行,但在评论时,会处理所有两行。 some_complex_script.sh执行所有类型的操作,例如启动进程,sqlplus,启动WildFly等。

./bin/call_some_script.sh | tee $SOME_LOGFILE &
wait

...

sqlplus  $ORACLE_USER/$ORACLE_PWD@$DB<<EOF
whenever sqlerror exit 1;
whenever oserror exit 2;
INSERT INTO TABLE ....
COMMIT;

quit;
EOF

...
nohup $SERVER_DIR/bin/standalone.sh -c $WILDFLY_PROFILE -u 230.0.0.4 >/dev/null 2>&1 &

我的问题是如果在some_complex_script.sh循环中有一些不应被称为的操作(可能需要10分钟)完成,这是一个好主意吗?)可能打破这个循环。 使用Jenkins和Publish over SSH Plugin调用该脚本。当some_complex_script.sh被单独调用时,没有问题。

1 个答案:

答案 0 :(得分:8)

您应该关闭或重定向运行的其他命令的stdin,以阻止它们从文件中读取。例如:

 sh call_other_script.sh </dev/null