Вы можете передать серию команд (по крайней мере, некоторым оболочкам, которые специально обрабатывают-
), например,
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 -
В продолжение предыдущего ответа @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
Основываясь на обоих ответах @Carpette и @AmitSanghvi:
Петли вида
while true
do
...
sleep 5
done
очень сложно прервать с помощью Ctrl+C . С другой стороны, интервал sleep
является главной целью для прерывания клавиатуры.
Лучше:
while sleep 5
do
...
done