通过命令行打开应用很酷的,当删掉快捷方式后,别人拿到你的电脑连应用都打不开。但是这一个简单的脚本还是经过了几代改进。
1代
只是实现打开程序的功能
#!/bin/bash
echo "1.eclipse 2.firefox q:quit"
read -t 40 -p "input choice:" choice
case "$choice" in
"1")
#打开eclipse
/home/SoftwareDev/eclipse/eclipse/eclipse
;;
"4")
#firefox
/usr/bin/firefox
;;
"q")
;;
*)
echo "input error!"
esac
结果:
root@jimo:/home/workspace# ./open.sh
1.eclipse 2.firefox q:quit
input choice:1
org.eclipse.m2e.logback.configuration: The org.eclipse.m2e.logback.configuration bundle was activated before the state location was initialized. Will retry ........
这没问题,但是打开的应用是terminal的子进程,所以关闭终端就会关闭应用,这个问题在打开的程序过多时尤为严重,很多终端确实不太舒服。
2代
所以我通过nohup将应用转入后台:
nohup 命令 &
"1")
#打开eclipse
nohup /home/SoftwareDev/eclipse/eclipse/eclipse &
;;
"2")
#firefox
nohup /usr/bin/firefox &
;;
这样在打开应用后就可以手动关闭终端了。
3代
但是,作为喜欢自动化的我怎么会手动关闭呢,岂不是太low了,于是过了一段时间又进行了修改,通过字符截取获得terminal的pid,然后杀死进程来关闭终端。
先看看如何取得pid
root@jimo:~# ps
PID TTY TIME CMD
30942 pts/3 00:00:00 bash
30959 pts/3 00:00:00 ps
root@jimo:~# ps | grep bash
30942 pts/3 00:00:00 bash
root@jimo:~# ps | grep bash | awk '{print $1}'
30942
root@jimo:~#
杀死:
kill -9 PID #-9代表强行杀死。
所以最终这样(加上有颜色的选项):
echo -e "\033[33m 1--->\033[0m Eclipse"
echo -e "\033[33m 2--->\033[0m firefox"
...
...
pid=$(ps | grep bash | awk '{print $1}')
kill -9 $pid