??好久沒寫東西了,,如果不往外輸出,就不知道自己到底經(jīng)歷過什么,,學(xué)到過什么,,簡書的第一篇文章從這篇前年寫在csdn的文章開啟,。以下是正文,希望大家能夠互相支持,,共勉,!
??Linux系統(tǒng)提供了大量的命令供用戶使用,一般來說,,一條命令對應(yīng)一定的功能,,當(dāng)我們需要完成復(fù)雜的任務(wù)時,就需要使用命令的組合或者寫腳本來完成,。有的時候,,這些指令組合需要多次執(zhí)行,,這個時候,我們就希望有一條命令可以代替我們需要輸入的復(fù)雜命令,。不然,,就不得不劈里啪啦地打一堆命令才行,。
臨時自定義命令
??Linux支持用戶自定義一個命令,。用戶可以使用alias(英文單詞,別名,,化名的意思)命令為一串指令指定一個別名,。使用alias命令自定義命令的方式如下:
alias command='command1;command2;command3...'
??例如,我們想要查看當(dāng)前目錄下的所有文件,,刪除名為template的文件夾,,再創(chuàng)建一個名為template的文件夾,并在里面創(chuàng)建一個名為temp.txt,內(nèi)容為11的文件,,需要執(zhí)行如下操作:
ls
rm -r template
mkdir template
cd template
cat 11 > temp.txt
??如果我們需要多次執(zhí)行上面的命令序列,,我們可以為其創(chuàng)建一個別名,假設(shè)此別名為abc, 需要執(zhí)行以下操作:
- type abc #查看是否存在名為abc的系統(tǒng)命令,,提示 bash: type: abc: not found,,與明不存在這樣的命令
- alias abc='ls;rm -r template;mkdir template;cd template;cat 11 > temp.txt'
- 執(zhí)行abc,測試命令是否生效
重啟也不會失效的自定義做法
??按照上面的方式自定義的命令在系統(tǒng)重啟后會失效,,想要每次開機后都能使用自定義的命令我們還需要做以下工作:
將自定義命令的操作寫入到/root/.bashrc_aliases文件里面,。如果文件不存在,創(chuàng)建此文件即可,,這個文件是Linux系統(tǒng)為自定義命令專門留的接口,。我們可以在/root/.bashrc中看到關(guān)于這個文件的描述。
延伸閱讀:
??從上述自定義命令的方式來看,,我們不僅可以為命令序列起別名,,還可以通過寫腳本的方式來構(gòu)建更加復(fù)雜的命令。例如ant編譯命令可以通過下面的方式傳入?yún)?shù)來編譯,,但需要輸入較多的文字,,用起來很麻煩:
ant release -Dsdk.dir=$sdk_path -Dtarget=android-$targetSdkVersion -Dclear.exist.libraries=$clear_static_libs_flag -Dstatic.libraries.dir=$static_lib_path -Dmykey.path=$keysoter_path
??為了方便編譯,我們可以開發(fā)一個shell腳本build.sh,,通過傳參數(shù)來完成調(diào)用,。
#!/bin/bash
echo 'The parameter is empty.We'll use default config to compile the module.'
echo 'Usage : '
echo '1. SDK path'
echo '2. target version No. '
echo '3. clear.exist.libraries. True means it will clear the libraries. '
echo '4. static.libraries.dir'
echo '5. Keystore path'
echo 'ant release -Dsdk.dir=$sdk_path -Dtarget=android-$targetSdkVersion -Dclear.exist.libraries=$clear_static_libs_flag -Dstatic.libraries.dir=$static_lib_path -Dmykey.path=$keysoter_path'
echo
sdk_path=$1
targetSdkVersion=$2
clear_static_libs_flag=$3
static_lib_path=$4
keysoter_path=$5
if [ x$sdk_path == x'' ]; then
read -p 'Continue or not ?[y/n]' decision
if [ $decision = 'y' ];then
ant release
else
exit 1
fi
elif [ x$targetSdkVersion == x'' ]; then
ant release -Dsdk.dir=$sdk_path
elif [ x$clear_static_libs_flag == x'' ]; then
ant release -Dsdk.dir=$sdk_path -Dtarget=android-$targetSdkVersion
elif [ x$static_lib_path == x'' ]; then
ant release -Dsdk.dir=$sdk_path -Dtarget=android-$targetSdkVersion -Dclear.exist.libraries=$clear_static_libs_flag
elif [ x$static_lib_path == x'' ]; then
ant release -Dsdk.dir=$sdk_path -Dtarget=android-$targetSdkVersion -Dclear.exist.libraries=$clear_static_libs_flag -Dstatic.libraries.dir=$static_lib_path
else
ant release -Dsdk.dir=$sdk_path -Dtarget=android-$targetSdkVersion -Dclear.exist.libraries=$clear_static_libs_flag -Dstatic.libraries.dir=$static_lib_path -Dmykey.path=$keysoter_path
fi
??使用腳本來執(zhí)行編譯的話,我們僅需要把腳本放到代碼目錄里面,,再執(zhí)行以下命令即可
./build.sh /work/sdk/android_5.1_sdk 22 false
??現(xiàn)在編譯命令比最開始的已經(jīng)簡化了很多,,缺點是我們需要知道腳本的存放位置。如果我們不想讓別的使用者知道這個腳本的位置,,并且希望輸入能更加簡潔,,這個時候就可以用上面介紹的自定義shell命令的方法了:
alias ca='/work/script/build.sh'
??這樣,,我們下次想要編譯代碼時,只需要在工程目錄下執(zhí)行ca命令并按照需要調(diào)用參數(shù)就可以了,。