Более новые версии bash
(Я верю, по крайней мере, v4), может использовать readline
вход и текст перед заливкой.
read -e -p "> " -i "our-platform-7.26-2.17-res4" SuggestDefaultPlatform
Если удар 4 не доступен, я использую rewrap
* для этого. -P
опция позволяет Вам предварительно заполнить текст строки..
SuggestDefaultPlatform=$(rlwrap -P "our-platform-7.26-2.17-res4" bash -c 'echo -n "> "; read response; echo $response')
Или в случае, может просто совершить нападки пользователь, входят для принятия значения или может отредактировать строку перед представлением. Это будет похоже на это:
> our-platform-7.26-2.17-res4_
Где _
курсор. Можно создать резервную копию полностью к o
, но >
останется как подсказка и не может быть переопределен. Только текст после подсказки находится в переменной.
* rlwrap
самостоятельно, возможно, должен быть установлен также.
while true; do
if [ -f $file ]; then
truecrypt -d /dev/sdj1
break
fi
$sendanemail
sleep n # change n to number of seconds to pause
done
Цикл , пока
не будет запущен оператор break
, будет продолжаться бесконечно до тех пор, пока не будет запущен оператор break
. Если [ -f $file ]
вычислит true, то запустится блок кода и break
завершит цикл. Иначе $sendemail
начнётся пожар, тогда уснёт n
и цикл начнётся заново
] Хорошо, для любого, кому он нужен, это мой окончательный сценарий, и он выглядит так, как будто работает как очарование. [
] [#!/bin/sh
#
# Comments....
############ Parameters ############
attempts="3"
from="from@example.com"
to="to@example.com"
smtp="smtp.example.com:25"
username="from@example.com"
pass="emailpass"
message="Sync to hard disk 1TB completed. You shall now remove the external hard drive."
subject="SRVR: Sync to hard disk 1TB completed."
file="/media/truecrypt2/sync/dummy.file"
sendanemail="sendemail -f $from -t $to -u $subject -s $smtp -xu $username -xp $pass -m $message"
subjectfail="Unable to umount external hard disk."
messagefail="Unable to dismount external hard disk after $attempts attempts. Please check it."
sendanemailfail="sendemail -f $from -t $to -u $subjectfail -s $smtp -xu $username -xp $pass -m $messagefail"
############ End Parameters ############
sleep 4
touch $file
if [ -f $file ];
then
cp /storage/sdf1/folder/*.txt /media/truecrypt2/sync/ -n -r
cp /storage/sdf1/folder/*.jpg /media/truecrypt2/sync/ -n -r
else
echo "my truecrypt password" | truecrypt /dev/sdj1 /media/truecrypt2 -t -k="" --protect-hidden=no -p=""
cp /storage/sdf1/folder/*.txt /media/truecrypt2/sync/ -n -r
cp /storage/sdf1/folder/*.jpg /media/truecrypt2/sync/ -n -r
fi
sleep 0
while [ -f $file ]; do
truecrypt -d /dev/sdj1
sleep 5
attempts=$(($attempts - 1)) # decrement timeout counter.
if [ $attempts -eq 0 ]; then
$sendanemailfail
break
fi
[[ ! -f $file ]] && $sendanemail # only send email once when `truecrypt -d` succeeds.
done
] while [[ -f $file ]]; do
truecrypt -d /dev/sdj1
sleep 10 # pause for 10 seconds
done
$sendanemail
Учитывая, что ваше $subject
является "Завершенным" сообщением, я полагаю, что вы хотите отправить только одно электронное сообщение.
Эта версия будет многократно пытаться размонтировать ваш диск truecrypt до тех пор, пока он не станет успешным, а затем отправить одно электронное сообщение.
Если USB-накопитель не удастся размонтировать, у вас будет бесконечный цикл. Альтернативой является добавление таймаута в скрипт.
attempts=5
while [[ -f $file ]]; do
truecrypt -d /dev/sdj1
sleep 10
attempts=$(($attempts - 1))
if [[ $attempts -eq 0 ]]; then
subject="Failed to unmount /dev/sdj1"
message="Cannot umount external hard disk. Please verify sync to hard disk 1TB completed and manually unmount the external hard disk before removal."
sendanemail="sendEmail -f $from -t $dest -u $subject -s $smtp -xu $username -xp $pass -m $message"
break
fi
# attempts=$(($attempts - 1)) # this adds an extra attempt
done
$sendanmail