在linux命令行上調試程序,經常是這樣子做:
$ ps x | grep sceneserver 8934 pts/9 S+ 0:00 grep sceneserver 26908 ? Ssl 8:34 ./sceneserver/sceneserver -d $ gdb attach 26908
首先通過ps命令找出進程id,然后用gdb attach上去,但這里涉及到了輸入兩個命令,還有一個進程ID,特別是輸入進程ID的時候,需要對着屏幕敲,或者復制下來。不管怎么樣,都顯得過於繁瑣。
自然而然想把敲進程ID這一個步驟省略掉,於是想把兩個命令合並到一起:
$ gdb attach `ps x | grep -v grep | grep sceneserver | awk '{print $1}'` 或者 $ gdb attach $(ps x | grep -v grep | grep sceneserver | awk '{print $1}')
``和$()內的命令輸出,可以當做一個參數參與到前一個命令之中。這里面"grep -v grep"是為了在進程輸出之中去掉grep進程的id。因為gdb attach只能接受一個進程id作為參數。在這里面xargs行不通,gdb會自動退出,原因暫時未知。
通過上面的過程, 我們節省了一個輸入進程ID的過程,但是還是需要輸入很長一段命令,甚至比之前的命令更長,這個時候我們就可以通過alias命令,將這個長命令映射到一個別名。
$ vim ~/.bashrc
在.bashrc文件中新增這一行:
alias gs='gdb attach $(ps x | grep -v "grep" | grep "sceneserver" | awk '\''{print $1}'\'')'
然后保存退出,通過 source ~/.bashrc 命令應用此設置,或者重新連接終端,此時在命令行輸入gs之后再回車,即可實現上述長命令可以達到的功能。
長期工作在命令行之上,善用alias,可以節省大量時間。