сценарий; если состояние, это делает это, если не делают что-то еще

Используя find в сочетании с pwd прекрасный ответ, но он создает две подоболочки и не необходим. Существует команда, которая сделает то, что Вы хотите:

readlink -f .htaccess

Вывод

$ cd /tmp && touch foo
$ ls ./foo
./foo
$ readlink -f ./foo
/tmp/foo
0
17.04.2019, 14:47
3 ответа

Вероятно, что кто-то может представить более изящное решение, но здесь является моим;

#!/bin/bash
count=`./prog status | grep complete | awk '{print $3}' | wc -l`
zero="0"
if [ "$count" -eq "$zero" ]
then echo "all done."
else echo "wait a little more and try again."
fi

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

2
28.01.2020, 02:15
  • 1
    grep -c complete мог занять место grep|awk|wc конвейер. –  enzotib 02.02.2012, 16:39
  • 2
    @enzotib я не знал о-c опции команды grep. –  patrician 03.02.2012, 01:43

Вы могли сделать что-то более простое как это:

[[ -n $(./prog status | awk '/complete/ {print $3}') ]] && echo "foo"

Эта строка только повторит "нечто", если вывод Вашей команды будет пуст.

3
28.01.2020, 02:15
  • 1
    grep pattern | awk '{commands}' мог быть сокращен как awk '/pattern/ {commands}'. –  enzotib 02.02.2012, 17:22
  • 2
    Да, я даже не думал об этом. Я должен уделить больше внимания. Я отредактировал ответ, но Вы не должны смущаться делать это сами :) –  rahmu 02.02.2012, 17:54

Завершенный, кажется, появляется только в состоянии Copying. Таким образом, это не имеет значения, кто из обоих проверяется.

while ( ./prog status|grep -qw complete 2>/dev/null )
  do
    echo Waiting one hour for copy to complete.
    sleep 3600
    # or exit if you like to
done
# Synced, do whatever is to be done
1
28.01.2020, 02:15

Теги

Похожие вопросы