Два находят сравнение команд

Выполните задание, когда Вы соединитесь с сетью. Большинство дистрибутивов имеет инфраструктуру сценариев, которую можно включить, хотя Вы должны будете базироваться полномочия. Если Вы соединяетесь с NetworkManager или Wicd, у них есть своя собственная инфраструктура рычага также. Добавьте задание крона, которое только работает, если сеть доступна (и, дополнительно, только если задание не было выполнено выполненное в долгое время), в случае, если сеть остается связанной в течение долгого времени.

Вы не указываете свое распределение, таким образом, я дам пример для находящегося в Debian распределения. Сценарии в /etc/network/if-up.d выполняются после того, как интерфейс поднят; посмотрите interfaces(5) страница справочника для получения дополнительной информации. Запишите сценарий /etc/network/if-up.d/zzzz_balki_git_pull такой как это:

#!/bin/sh
su balki -c /home/balki/bin/pull_repository_if_old

с a pull_repository_if_old это делает что-то вроде этого (работать git pull если сеть доступна, если нет метка времени, которая меньше чем 7 дней):

#!/bin/sh
set -e
if [ -z "$(find /path/to/.repository.pull.timestamp -mtime -7)" ] &&
   ping -c 1 -w 1 repository.example.com >/dev/null 2>/dev/null
then
  cd /path/to/repository
  git pull
  touch /path/to/.repository.pull.timestamp
fi
EOF

И crontab запись на Вашей учетной записи:

28 4 * * * /home/balki/bin/pull_repository_if_old

12
17.02.2014, 01:28
3 ответа

Вы говорите grep искать 2 места. grep только показывает все местоположение, если несколько местоположений ищутся.

Например,

touch /tmp/herp /tmp/derp
cd /tmp
echo "foo" > herp
echo "foo" > derp

Заметьте, как, если я ищу всего 1 файл, grep опускает имя файла

grep -i "foo" /tmp/herp
foo

Но если я указываю, что несколько поисковых местоположений, grep говорит, где он нашел каждое соответствие

grep -i "foo" herp derp
/tmp/derp:foo
/tmp/herp:foo

Добавление /dev/null это обманывает grep в распечатывание полного пути путем обеспечения 2 аргументов.

17
27.01.2020, 19:54
  • 1
    +1, но Вы забыли упоминать "очевидное": "Причина добавленный файл /dev/null должно быть уверено, что то независимо от того, что grep-редактор, не будет найдено в (пустом) /dev/null файл, поэтому только корректные местоположения производятся" –  Olivier Dulac 17.02.2014, 11:24
  • 2
    Но также и, путем поиска /dev/null Вы не тратите впустую времени seaching через непустой фиктивный файл. И наконец, намерение поиска /dev/null очевидно для знакомых с этой идиомой. –  alexis 17.02.2014, 14:10

man grep:

- H, - с именем файла

Распечатайте имя файла для каждого соответствия. Это - значение по умолчанию, когда существует больше чем один файл для поиска.

Различие следует grep называемый с одним или двумя аргументами файла в этих двух случаях. Вместо добавления /dev/null Вы могли звонить grep с аргументом -H. Возможно, /dev/null поведение более широко поддерживается.

5
27.01.2020, 19:54
  • 1
    grep -H не является портативным - /dev/null обманите работы без GNU grep. –  Chris Down 17.02.2014, 04:19

Первый пример эквивалентен выполнению grep более чем два файла для каждого файла, найденного в результате find выражение. Например, если find находит три файла a.txt, b.txt и c.txt затем grep будет работать как

grep -i "madis" a.txt /dev/null
grep -i "madis" b.txt /dev/null 
grep -i "madis" c.txt /dev/null

К которому grep покажет имя файла, для которого вывод соответствует. Так как ничто не будет соответствовать/dev/null, гарантируется, что имя файла первого файла будет распечатано, если это будет соответствовать.

Принимая во внимание, что, второй пример эквивалентен из

grep -i "madis" a.txt
grep -i "madis" b.txt 
grep -i "madis" c.txt 

В этом случае имя файла не будет распечатано для соответствий, поскольку существует всего один аргумент.

4
27.01.2020, 19:54

Теги

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