#!/bin/bash
dir="$HOME/TAM/dustbin"
# check if the dir is empty
shopt -s nullglob
files=("$dir"/*)
if (( ${#files[@]} == 0 )); then
echo "the directory is empty"
exit
fi
# handle command line arguments
all=false
while getopts :a opt; do
case $opt in
a) all=true ;;
?) echo "unknown option: -$OPTARG"; exit 1 ;;
esac
done
shift $((OPTIND - 1))
# perform the deletion
if $all; then
command rm "$dir"/*
else
command rm -i "$dir"/*
fi
Относительно ресурсов: ПРОЦЕССОР: Оба процесса спят - когда они спят, они не тратят впустую процессор. [113565]cron[113566] чаще просыпается, чтобы проверить что-то, но он все равно это делает (для вашего процесса больше нет). И это ничтожная нагрузка, большинство демонов просыпаются время от времени. Память: Вероятно, у вас [113567]cron[113568] работает независимо от этого процесса, так что это вовсе не накладные расходы. Однако, cron запустит оболочку только при вызове скрипта, в то время как ваш скрипт останется загруженным в памяти (bash-процесс с окружением - несколько килобайт, если только вы не загружаете все в переменные оболочки).
В целом, для ресурсов это не имеет значения.[113278]
Шансы, что вы собираетесь написать лучший планировщик в вашем скрипте, по сути, равны нулю. Использование cron будет работать лучше, избегая лишнего кода в вашем скрипте и сохраняя ваш код лаконичным и более удобным для обслуживания.
Не изобретайте колесо заново, если вам не нужно.[112441].
Другими словами, [112882]cron[112883] будет запускаться только один раз в минуту и будет проверять, следует ли его запускать. Ваш подход "сна", с другой стороны, потребует, чтобы ваша фактическая команда [112884] sleep[112885], ваша оболочка, ваш терминал, и [112886] в то время как [112887] (или что-то в этом роде) цикл был запущен в то же время. Даже если бы они запускали одинаковое количество процессов, [112888]cron[112889] было бы лучше. Именно для этого и пишут люди, которые, как правило, очень хорошо справляются со своей работой. Он наверняка сделает это лучше, чем простой цикл оболочки. [112453]
стабильный и проверенный
позволяет сложные длительные повторы ("каждое второе воскресенье в 5:35 утра". "), предназначенный для фоновых процессов
работает с момента запуска системы и далее, так же как и ваш скрипт, после установки
более легкий ввод длительных циклов (часов, дней, недель)
delay 0.3 -- time to release modifier keys if the script is run with a shortcut
tell application "System Events" to tell (process 1 where frontmost is true)
if name is "Google Chrome" then
keystroke "p" using {option down, command down}
delay 0.1
tell menu button 1 of window 1
click
click menu item "Save as PDF…" of menu 1
end tell
keystroke "l" using {option down, command down}
keystroke return
else
keystroke "p" using command down
tell menu button 1 of sheet 1 of window 1
click
click menu item "Save as PDF…" of menu 1
end tell
keystroke "l" using {option down, command down}
keystroke return
end if
end tell
Pro [114560] сна [114561]:
tell application "Google Chrome" to tell active tab of window 1
set u to URL
set t to title
end tell
do shell script "wkpdf --source " & quoted form of u & " --output ~/Desktop/" & quoted form of t & ".pdf"
легче поддерживать в сценарии
легче для процессов на переднем плане
позволяет время сна короче и точнее, чем минута
позволяет сложный сон / действия циклов ("запустить эту часть, а затем спать 10 секунд, а затем запустить другую часть и спать два часа")
Здесь уже есть хорошие и более информированные ответы, но я просто хотел отметить, что с sleep
у вас есть возможность заморозить процесс на переменное время, скажем, как функцию некоторых других переменных.
Если я пишу скрипт для проверки заряда батареи в процентах и notify-send
, если он ниже заданного критического уровня, я могу сделать скрипт sleep
на время, которое является функцией текущего уровня батареи в процентах, вместо того, чтобы проверять батарею каждые одну-две минуты с помощью cron, даже если я знаю, что при последней проверке он был 80%.
Battery_notify.sh
#!/bin/bash
CRIT=15
while true; do
# current battery level
BAT_LEVEL=`acpi -b |grep -Eo "[0-9]+%"|grep -Eo "[0-9]+"`
interval=$((($BAT_LEVEL -$CRIT) * 120)) # loose estimate of backup time for each percentage of battery charge.
# Is AC plugged in?
state=`acpi -b |grep -Eo "[A-Za-z]+harging"`
#only notify if not Plugged in
if [ "$state" = "Discharging" ] ; then
# is battery below CRIT level?
if [ $BAT_LEVEL -le $CRIT ]; then
aplay ~/apert.wav &
notify-send "Battery-Low!!!" -i /home/bibek/batt.png -t 900
sleep 100 # nag me each 100 secs untill I plug the thing
else
sleep $interval
fi
else
# if plugged in sleep
if [ $BAT_LEVEL -le $CRIT ]; then
sleep $interval
else
# to check if the AC is unplugged before battery gains charge above CRIT.
sleep 100
fi
fi
done