脚本式快捷键:一个简化shell终端命令输入的工具

1.解决的问题

当你需要一次输入很多个命令的时候,,例如一次去多个目录删除文件cd dir1rm file1.tempcd ../../dir2rm -rf dir3

当你懒得输入一个好长的命令或者直接就记不住那么长的命令的时候,例如生成ctagsctags –languages=C++ –exclude=third_party –exclude=.git –exclude=build –exclude=out -R -f .tags

当你想要个类似快捷键来一键搞定重复的事情又懒得写好多脚本的时候,duang~~这个工具就有用啦!

2.感性认识

这个工具是个shell脚本,附在本文末尾,复制整个脚本源码,在本地保存为rew.sh,放到$PATH下,加上chmod +x权限。文件名命名可以按喜好改。r e w 可以用一只左手输入完毕,然后tab键就出.sh了,我感觉挺好的。

前面所说的复杂操作就变成了这么简单:

一次去几个目录删除文件,只需要rew.sh d如果想指定起始目录,还可以再带参数rew.sh d dir_path

生成ctags,只需要rew.sh ct

如果忘了这个脚本有什么功能,只需要不带参数运行crt.sh就会列出所有的命令。

3.理性认识如果想加入自定义的命令,找到cmds=(xxxxx)的地方,增加一行就可以了。每行就是一个参数和实际命令,可以看到:# defines commands here,format:# shortcut|one space|actioncmds=( ‘w ninja -C out/Debug android_webview_apk’ ‘gyp build/gyp_chromium’ ‘d gdb -ex=r –args out/Debug/chrome –no-sandbox ‘ ‘ct ctags –languages=C++ –exclude=third_party –exclude=.git –exclude=build –exclude=out -R -f .tags’ # ‘e echo example to show this can be commentted’ ‘r ninja -C out/Debug chrome_shell_apk’ ‘u updateChrome’ ‘t testChromeShellMemory’ ‘o openUrlInCAWShell’)也就是,第一个空格前是rew.sh的参数(快捷键),第一个空格后是实际运行的命令。其中多个步骤的命令可以做成函数,例如updateChrome() { git pull cd third_party/WebKit git pull gclient sync –nohooks}

如果怕忘记长命令用来干什么,也可以放到函数里,函数名要见名知意或者加注释。

这个脚本可以被其它脚本调用,返回值和被代替的命令相同。

附工具脚本:

#!/bin/bash#author liuhx 2015/03/03 # if including multiple steps, combine them into functionupdateChrome() { git pull cd third_party/WebKit git pull gclient sync –nohooks}testChromeShellMemory() { ps=`adb shell ps | grep org.chromium.chrome.shell` rsss=`echo "$ps" | awk ‘{print $5;}’` echo "$rsss" pids=`echo "$ps" | awk ‘{print $2;}’` for p in $pids; doadb shell dumpsys meminfo $p | grep TOTAL | awk ‘{print $2;}’ done}openUrlInCAWShell() { # $1 should be url adb shell am start -a android.intent.action.VIEW -n com.caw.webkit.test/.BrowserActivity -e policy UCM_CURRENT_WINDOW -d $1}# defines commands here,format:# shortcut|one space|actioncmds=( ‘w ninja -C out/Debug android_webview_apk’ ‘gyp build/gyp_chromium’ ‘d gdb -ex=r –args out/Debug/chrome –no-sandbox ‘ ‘ct ctags –languages=C++ –exclude=third_party –exclude=.git –exclude=build –exclude=out -R -f .tags’ # ‘e echo example to show this can be commentted’ ‘r ninja -C out/Debug chrome_shell_apk’ ‘u updateChrome’ ‘t testChromeShellMemory’ ‘o openUrlInCAWShell’)echoHelp() { for ((i = 0; i < ${#cmds[@]}; i++)); doecho "${cmds[$i]}" done shName=`basename $0` echo -e "\033[0;33;1mexample: input ‘$shName ${cmds[0]%% *}’ to run ‘${cmds[0]#* }’\033[0m"}if [[ $# -eq 0 ]]; then echoHelp exit 255fifor ((i = 0; i < ${#cmds[@]}; i++)); do cmd=${cmds[$i]} shortcut=${cmd%% *} if [[ "$shortcut"x == "$1"x ]]; thenaction=${cmd#* }echo -e "\033[0;33;1m$action\033[0m"# skip shortcutshift 1eval $action $@exit $? fidone# if no cmd matched, echoHelpechoHelp转载请注明出处:

每一个成功者都有一个开始。勇于开始,才能找到成功的路。

脚本式快捷键:一个简化shell终端命令输入的工具

相关文章:

你感兴趣的文章:

标签云: