Тихий пока л oop в bash - PullRequest
       86

Тихий пока л oop в bash

0 голосов
/ 31 января 2020

Я хочу создать сценарий bash, который будет проверять файл в каталоге и выполнять с ним определенные операции. Я использую while l oop, если файл не существует, я хочу, чтобы l oop оставался без изменений и продолжал проверять состояние. Вот то, что я создал, но он продолжает выдавать ошибку, что файл не найден, если файл не существует.

while [ ! -f /home/master/applications/tmp/mydata.txt ]

do

cat mydata.txt;
rm mydata.txt;

sleep 1; done

Ответы [ 2 ]

1 голос
/ 31 января 2020

В вашей реализации есть две проблемы:

  1. Вы должны использовать один и тот же (абсолютный или относительный) путь в вашем операторе while l oop test [ ! -f $file ] и в ваших командах cat и rm ,

Команда cat ищет файл в текущем рабочем каталоге (pwd), а ваш оператор while может искать где-то еще, и, следовательно, ваша реализация содержит ошибки и не будет работать как и ожидалось, если ваш pwd не /home/master/applications/tmp.

Вам нужно переместить команду cat и команду rm после блока while. Нет смысла присваивать файл, если файл не существует. Я думаю, что вы потеряли эти команды.

Попробуйте это:

file="/home/master/applications/tmp/mydata.txt"
while [ ! -f "$file" ]
do
sleep 1
done

cat $file
rm $file

РЕДАКТИРОВАТЬ

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

file="/home/master/applications/tmp/mydata.txt"
until [ -f "$file" ]; do sleep 1; done

cat $file
rm $file
0 голосов
/ 31 января 2020

Делая предположение отличное от abhiarora, я думаю, возможно, вы хотели, чтобы файл появился снова, и вы хотите, чтобы он показывался каждый раз.

file=/home/master/applications/tmp/mydata.txt
while :
do if [[ -f "$file" ]]
   then echo "$(<"$file")"
        rm "$file"
   fi
   sleep 1
done

Это создает бесконечное l oop. Если это НЕ то, что вы хотели, используйте решение Abhiarora.

...