Като сравнително нов за всичко друго освен за баши скриптове, създадох скрипт
- проверете дали процесът се изпълнява
- извежда PID "към корпуса
- ако не бъдете подканени от потребителя и да започнете и т.н.
Преместих се върху позиционните параметри и не мога да видя къде греша:
if [ "$1" == "" ]; then
proc_finder
elif [ $1 != "" ];then
case $1 in
-p | --process )
shift
z=$(ps aux |grep $1 |grep -v grep > /dev/null)
if [ ! -z "$z" ]; then
echo "YES"
else
echo "NO"
fi
;;
* )
echo "Usage -p (process)"
esac
fi
Това винаги се връща yes
дори когато се пускат -p test
например. Знам, че съм правил нещо основно погрешно, като гледах подробния изход grep -v grep
се извършва последно, затова вярвам, че винаги се връща изходно състояние от 0.
Отговори:
1 за отговор № 1Не трябваше да е така if [ $? -eq 0 ]
?
EDIT 1
Можете да опитате това:
z=`ps aux | grep $1 | grep -v grep > /dev/null`
if [ ! -z "$z" ]; then
echo "YES"
else
echo "NO"
fi
ако $z
не е празна (-z
: тест за нула дължина низ) това предполага, че процесът е открит с ps
команда.
EDIT 2
Най- ps ... grep ... grep
се пренасочва към /dev/null
, Това означава z
няма да съдържа нищо. премахнете пренасочването и z
трябва да има известен резултат.
z=`ps aux | grep $1 | grep -v grep`
EDIT 3
Друга възможност е просто да направите това:
ps aux | grep $1 | grep -v grep > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "YES"
else
echo "NO"
fi
В този случай не записвате изхода на grep. Това е хубаво, ако нямате нужда от това.