Как запускать команду каждые 5 секунд в Solaris?

Вы можете передать серию команд (по крайней мере, некоторым оболочкам, которые специально обрабатывают- ), например,

sh - <<'EOF'
chmod +x ~/ses.sh || exit 1
sh ~/ses.sh || exit 1
rm ~/ses.sh
EOF

, хотя было бы неудобно запускать nanoв трубе.

Похоже, это не особенность оболочки POSIX, которая говорит только

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

Вы также можете записать это как

#!/bin/sh
{
echo "chmod +x ~/ses.sh"
echo "sh ~/ses.sh"
echo "rm ~/ses.sh"
} | sh -

1
03.03.2016, 15:18
2 ответа

В продолжение предыдущего ответа @Carpette... вот параметризованная версия того же скрипта.

if [ $# -ne 2 ]; then
  echo "ERROR: Syntax is script <command> interval"
  exit
fi

while true
do
  eval "${1}"
  echo "
++++++++++++++++++++++++++++++++++++
"
  sleep $2
done

Пример использования:

~/scripts/watch.sh "tail -10 /oracle/home/alert.log" 5
0
26.05.2021, 09:06

Основываясь на обоих ответах @Carpette и @AmitSanghvi:

Петли вида

while true
do
   ...
    sleep 5
done

очень сложно прервать с помощью Ctrl+C . С другой стороны, интервал sleepявляется главной целью для прерывания клавиатуры.

Лучше:

while sleep 5
do
   ...
done
1
26.05.2021, 22:41

Теги

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