Есть ли команда Linux, которая ничего не делает, но никогда не выходит? [duplicate]

Начиная с версии Закари Брэди:

for i in {a..z} 
 do 
   ( echo $i ;
     grep -c    "^[^$i]*$i[^$i]*$i[^$i]*$" file1; 
     grep -m 1  "^[^$i]*$i[^$i]*$i[^$i]*$" file1
   ) | paste - - - 
 done
  • "^[^$i]*$i[^$i]*$i[^$i]*$" - это гарантия того, что мы получим ровно 2 вхождения $i (пример ^[^a]*a[^a]*a[^a]*$)
  • grep -c . . подсчитывает количество совпадающих слов
  • grep -m 1 ... получает первое совпадающее слово
  • paste - - - ... объединяет 3 выходные строки в одну строку

Если вы предпочитаете пример со случайными словами, замените второй grep на

grep "^[^$i]*$i[^$i]*$i[^$i]*$" file1 | shuf | head -1

Другая альтернатива для "ensure exactly two" - find 2 aa и reject if aaa:

grep 'a.*a' file1  | grep -vc 'a.*a.*a' 
14
19.05.2017, 19:34
5 ответов

вы можете:

tail -f /an/existing/regular/file >/dev/null

Это не будет использовать stdin (как read) и будет ждать нового добавления в /an/existing/regular/file (не не работает с некоторыми файлами: tail -f /dev/null завершится немедленно. Но будет работать со всеми обычными файлами. Если этот файл не растет, команда будет потреблять мало ресурсов процессора)

6
27.01.2020, 19:50

GNU sleep и sleep, встроенный в ksh93 (но не mksh) принимают любые числа с плавающей запятой, а не только целые, поэтому вы можете сделать это:

sleep infinity
17
27.01.2020, 19:50

Просто добавьте команду sleep.

while true; do sleep 600; done

будет спать в течение 10 минут между циклами.

18
27.01.2020, 19:50

Не навсегда, но есть сон. Вы можете комбинировать свой цикл while со спящим режимом - кажется, что он даже не щекочет процессоры в моем мониторе gkrellm.
dr01 типы быстрее, чем я :) ... так что больше информации - ваш процессор скачет потому, что он должен постоянно обрабатывать логическую проверку без паузы между....

while true
do
  sleep 100
done

Или в виде однострочника

, хотя это правда; спят 100; done

5
27.01.2020, 19:50

Поскольку вы упомянули ctrl-C, я предполагаю, что вы хотите использовать его в интерактивном терминале. Таким образом, вы можете просто дождаться ввода.

$ read

или просто используйте произвольные другие команды, которые читаются из stdin, такие как cat. Они ничего не делают до тех пор, пока нет входных данных.

$ cat >/dev/null

или даже лучше без использования stdin:

$ tail -f <<EOF
EOF
16
27.01.2020, 19:50

Теги

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