shell-命令行打开程序的进化

通过命令行打开应用很酷的,当删掉快捷方式后,别人拿到你的电脑连应用都打不开。但是这一个简单的脚本还是经过了几代改进。

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

1

你可能感兴趣的:(Kalilinux)