Я пытаюсь написать вспомогательную функцию для использования в сценарии bash, чтобы взять строку приглашения переменной и вернуть значение, введенное пользователем. То, что у меня есть, сидит и ждет, пока пользователь введет значение, не отображая сначала подсказку, что озадачивает. Он также сохраняет эхо в возвращаемом значении ($foo) и не сохраняет значение, считанное с переменной pid.
!#/bin/bash
pid=0
promptValue() {
msg="$1"
echo -e "$msg"
read val
pid=$val
}
foo=$(promptValue "type something")
EDIT: Для тех, кто захочет использовать это в будущем для собственного использования, это полный (функциональный) скрипт, предназначенный для отправки электронного письма (в данном случае на мой мобильный телефон) на дайте мне знать, когда завершится длительный процесс. Я уверен, что должен быть лучший способ сделать это, но мех. :-) (Я написал их так, чтобы использовать их в библиотеке функций bash в другом месте.)
#!/bin/bash
promptValue() {
read -p "$1"": " val
echo $val
}
alertme() {
if [ -z "$email" ]; then
email=$(promptValue "Enter email")
fi
if [ -z "$email" ]; then
echo "ERROR: No email set!"
exit 1
fi
if [ -z "$pid" ]; then
pid=$(promptValue "Enter pid")
fi
if [ -z "$pid" ]; then
echo "ERROR: No pid set!"
exit 1
fi
ps -ef | grep $pid | grep -v grep > /dev/null 2>&1
while [ $? eq 0 ]; do
sleep 10
ps -ef | grep $pid | grep -v grep > /dev/null 2>&1
done
echo "Process Complete" | mailx -s "Process Complete" $email
}
alertme
Еще раз всем спасибо!
while ps...; do
, чтобы вам не нужно было повторять это. Вы можете сделатьread -p "$1: " val
без дополнительных кавычек. Вы должны сузитьgrep
изps
, чтобы уменьшить ложноотрицательные результаты: например,ps -ef -o pid=
(это также позволит вам исключитьgrep -v
). Вы можете использоватьgrep -q
, чтобы избежать перенаправления. Ваши подсказки/вводы могут быть вwhile
циклах, если вы хотите избежать сброса. - person Dennis Williamson   schedule 02.01.2010ps -eo pid=
- person Dennis Williamson   schedule 02.01.2010