检查文件是否存在并等待sh脚本运行,直到找到该文件

时间:2013-04-04 13:03:58

标签: linux bash

我正在研究一个有时非常慢的Linux服务器。因此,当我为我添加一些工作时,我必须等待几个小时才能进行简单的计算。

我想知道我是否能够开始下一次分析但让它等到前一次分析的输出就在那里。 (第二个分析需要第一个分析输出)

我尝试使except和其他选项有效但仍然没有成功(在stackoverflow上的上一个问题中找到除了和其他选项): expect { 'output/analysis_file1.txt' }

任何想法/提示都会受到赞赏,并会帮助我分配。

我唯一想要的是让第二个脚本等到第一个脚本的文本文件被给出。

4个脚本:1。

#!/bin/bash
#$ -cwd
./script1.sh 

. ./script2.sh $repla

. ./script3.sh $replac

2:

repla=''
for i in 'abcdefghijklmnopqrst'
do
   repla=`echo $i | sed 's/'abc'/'xyz'/g'`
   #echo $repla
done

3:

replac=''
for j in $1
do
   replac=`echo $j | sed 's/'xyz'/'san'/g'`
   #echo $replac
done

4:

replace=''
for h in $1
do
   replace=`echo $h | sed 's/'san'/'sander'/g'`
   #echo $replace
done

3 个答案:

答案 0 :(得分:7)

您可以使用以下核心进行一些修改

#!/bin/bash
while  [  ! -f FILE_NAME ]
  do
     sleep SOME_SECONDS
  done
echo "file found"

答案 1 :(得分:1)

您应该创建一个master script runner,而不是单独执行多个脚本:

#!/bin/bash

# sanity checks & parse arguments

./script1
ret=$?
# check for return value of script1 using $ret variable

./script2
ret=$?
# check for return value of script2 using $ret variable

./script3
ret=$?
# check for return value of script3 using $ret variable

...
# do cleanup and reporting

答案 2 :(得分:1)

如果您知道在后台运行的进程的pid,则可以使用wait。 Wait也将返回它等待停止的进程的相同退出代码。

firstProcess &  # Running in background
firstPid=$!
otherProcess    # Concurrent with firstProcess
wait $firstPid  # Wait firstProcess finish
anotherProcess