我编写了一个有效的bash脚本,除非你告诉它不要结束这个过程。我一直在撞墙,试图让这个脚本退出0而不执行任何其他命令。
#!/bin/bash
createProcfile() {
ps -eLf | grep -f process.tmp | grep -v 'grep' | awk '{print $2,$10}' | sort -u | egrep -o '[0-9]{4,}' > pid.tmp
}
# PIDproc=$(createProcfile)
PIDFile=pid.tmp
echo "Enter a process name"
read process
echo $process > process.tmp
node_process_id=$(pidof $process)
if [[ -z $node_process_id ]]; then
echo "Please enter a valid process."
rm process.tmp
exit 0
fi
ps -eLf | grep $process | awk '{print $2,$10}' | sort -u | grep -v 'grep'
echo "Would you like to kill this process(es)? (y/n)"
read $answer
if [[ $answer == n ]]; then
exit 0
else
createProcfile
kill -SIGKILL $(<"$PIDFile")
rm $PIDFile
createProcfile
node_process_id=$(pidof $process)
if [[ -z $node_process_id ]]; then
echo "Process terminated successfully."
rm process.tmp
exit 0
else
echo "Process not terminated. Kill process manually."
ps -eLf | grep $process | awk '{print $2,$10}' | sort -u | grep -v 'grep'
rm $PIDFile
rm process.tmp
exit 0
fi
fi
如果我输入n
,我需要退出而不执行命令。现在,无论如何它都会杀死这个过程。
答案 0 :(得分:2)
read
将变量的名称作为参数:
read answer
你写的是语法正确的; bash
会扩展answer
的当前值,以获取read
将设置的变量的名称。最有可能的是,answer
还没有值,因此命令会缩减为read
,不带参数,在这种情况下read
会设置参数REPLY
的值。
请注意,如果您遵循引用所有参数扩展的良好做法,则可能已编写read "$answer"
,其扩展为read ""
,这会产生错误,指示{{1} }}不是有效的标识符。
答案 1 :(得分:0)
您分配的答案错误
read $answer
应该是
read answer
答案 2 :(得分:-1)
我修好了!
我改变了:
if [[ $answer == n ]]
为:
if [[ $answer -eq "n" ]]
并且,它有效!
是的,在回答了我自己的问题之后,我发现还有很多工作要做,所以......