Сценарий Bash, который, кажется, нажимает нежелательную клавишу возврата

Я написал скрипт bash, который сначала выполняет операции с текстовыми файлами, а затем выполняет другой скрипт изнутри, повторяя эту операцию в цикле while. Скрипт, который выполняется изнутри, в определенное время запрашивает у пользователя

«нажмите, чтобы остановить»

и подождите 5 секунд, если пользователь не нажмет возврат, пойдет дальше. Если я выполняю этот скрипт один, он работает нормально, но если я запускаю его внутри другого, кажется, что клавиша возврата нажимается автоматически и останавливает выполнение.

Как я могу этого избежать?

Вот пример скрипта:

#!/bin/bash

pMatrixFile='file.csv'
templateFile='out.txt'



nSim=0 
while read line
  do
  ((nSim++))

# ***************Read the input file*****************************************

  scale1=$(echo $line | cut -f1 -d\;)
  scale2=$(echo $line | cut -f2 -d\;)

# ***************Write the file to be runned*********************************

  sed -e "/double Scale_EX2  = / s|scale_DOE|$scale1|g" \
      -e "/double Scale_EX6  = / s|scale_DOE|$scale2|g" \
      -e "/double Scale_EX7  = / s|scale_DOE|$scale8|g" <$templateFile >$fileName      

# ***************Launch the simulation on server*****************************
  sed -e "s|simFile|$simFile|g" <$submitTemplateFile >$submitFile      
  sed -i "s|simVisName|$simVisName|g"  $submitFile


# *************At this line we have the issue!***********
  chmod a+x $submitFile
  . ./$submitFile |tee  log 
# *******************************************************

# ***************Clean up the temporary files********************************
  rm $simFile $fileName $submitFile

  done<$pMatrixFile

$submitFile — это мой внешний скрипт.

Спасибо за помощь!


person user3828750    schedule 11.07.2014    source источник
comment
Вы написали внутри $submitFile в качестве первой строки #!/bin/bash? Если есть #!/bin/sh, команда read должна работать по-другому...   -  person Hastur    schedule 11.07.2014


Ответы (1)


Используйте файловый дескриптор, отличный от стандартного ввода (0). Пример:

while read -u 4 line; do
    ...
done 4< your_file.txt

Это поможет предотвратить некоторые части вашего while block потреблять входные данные от your_file.txt каждый раз, когда они просят об этом.

person konsolebox    schedule 11.07.2014