在Bash腳本中引入alias的方法
alias的使用
在日常開(kāi)發(fā)中,為了提高運(yùn)維效率,我們會(huì)用alias(命令別名)來(lái)定義命令的簡(jiǎn)稱(chēng)。比如在~/.bash_profile
中添加:
alias ll='ls -lrt --color' alias bdebug="go build -gcflags '-N -l'" alias py3='/usr/bin/python3'
執(zhí)行source ~/.bash_profile
之后,這些alias定義便載入到當(dāng)前終端環(huán)境中,我們可以通過(guò)alias <cmd>
進(jìn)行查看
$ alias ll ll='ls -lrt --color' $ alias bdebug bdebug='go build -gcflags '\''-N -l'\'
在命令行執(zhí)行alias也能看到預(yù)期效果
$ ll total 44 -rw-rw-r-- 1 liyang liyang 62 Sep 16 09:38 test.c -rw-rw-r-- 1 liyang liyang 68 Sep 16 09:38 foo.h -rw-rw-r-- 1 liyang liyang 74 Sep 16 09:38 foo.c -rwxrwxr-x 1 liyang liyang 8592 Sep 16 09:44 libfoo.so -rw-rw-r-- 1 liyang liyang 4347 Sep 16 09:44 o23.s -rwxrwxr-x 1 liyang liyang 9451 Sep 16 09:45 test
在Bash腳本中引入alias的問(wèn)題
但是有些時(shí)候,我們希望將~/.bash_profile
中定義好的alias引入Bash腳本中,以便簡(jiǎn)化命令。例如
腳本文件test.sh
#!/bin/bash source ~/.bash_profile ll
執(zhí)行test.sh文件卻會(huì)報(bào)錯(cuò)
$ bash test.sh test.sh: line 5: ll: command not found
這是因?yàn)樵贐ash中,alias默認(rèn)是不能引入Bash腳本中的。Bash的官方文檔其實(shí)更建議你使用function
而非alias
。那么問(wèn)題來(lái)了,既然我辛辛苦苦寫(xiě)了這么多alias,總不能全部改成function吧,那得多費(fèi)勁?
幸好,解決方法還是有的.
解決方法
只需要在test.sh中加入一行shopt -s expand_aliases
新的腳本文件
#!/bin/bash shopt -s expand_aliases source ~/.bash_profile ll
執(zhí)行一下,果然成功了,這是為什么呢?
$ bash test.sh total 48 -rw-rw-r-- 1 liyang liyang 62 Sep 16 09:38 test.c -rw-rw-r-- 1 liyang liyang 68 Sep 16 09:38 foo.h -rw-rw-r-- 1 liyang liyang 74 Sep 16 09:38 foo.c -rwxrwxr-x 1 liyang liyang 8592 Sep 16 09:44 libfoo.so -rw-rw-r-- 1 liyang liyang 4347 Sep 16 09:44 o23.s -rwxrwxr-x 1 liyang liyang 9451 Sep 16 09:45 test -rw-rw-r-- 1 liyang liyang 64 Mar 8 21:33 test.sh
關(guān)鍵在于shopt -s expand_aliases
這句話(huà),shopt
是一個(gè)命令,使用它可以控制一些shell相關(guān)的開(kāi)關(guān):expand_aliases
就是其中一個(gè),當(dāng)它被開(kāi)啟之后,Bash腳本中的所有命令別名alias
都會(huì)被展開(kāi)。
expand_aliases
If set, aliases are expanded as described below under Aliases, Aliases. This option is enabled by default for interactive shells.
總結(jié)
- alias命令可幫助我們自定義命令別名,簡(jiǎn)化運(yùn)維操作
- 缺省情況下無(wú)法將終端環(huán)境中的alias引入到Bash腳本中
- 通過(guò)
shopt -s expand_aliases
,可以解決上述問(wèn)題。
參考
https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html
到此這篇關(guān)于在Bash腳本中引入alias的方法的文章就介紹到這了,更多相關(guān)Bash腳本引入alias內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
分享一個(gè)可以通過(guò)命令簡(jiǎn)寫(xiě)執(zhí)行對(duì)應(yīng)命令的Shell腳本
這篇文章主要分享了一個(gè)可以通過(guò)命令簡(jiǎn)寫(xiě)執(zhí)行對(duì)應(yīng)命令的Shell腳本,幫助大家更好的理解和使用shell,感興趣的朋友可以了解下2020-12-12linux shell實(shí)現(xiàn)隨機(jī)數(shù)幾種方法分享(date,random,uuid)
這篇文章主要介紹了linux shell實(shí)現(xiàn)隨機(jī)數(shù)多種方法(date,random,uuid),需要的朋友可以參考下2015-10-10shell腳本中case條件控制語(yǔ)句的一個(gè)bug分析
在shell腳本中,發(fā)現(xiàn)case語(yǔ)句的一個(gè)問(wèn)題。就是指定小寫(xiě)字母[a-z]和大寫(xiě)字母[A-Z]的這種方法不管用了2013-11-11Linux中的service命令與systemctl命令有何區(qū)別
在Linux中,service?和?systemctl?是兩個(gè)至關(guān)重要且極其相似的命令,它們?nèi)绱讼嗨?,以至于人們很容易想知道它們之間有何不同,是否可以互換使用,下面我們就來(lái)看看之前的區(qū)別到底有哪些吧2023-08-08Shell腳本實(shí)現(xiàn)自動(dòng)修改IP、主機(jī)名等功能分享
這篇文章主要介紹了Shell腳本實(shí)現(xiàn)自動(dòng)修改IP、主機(jī)名等功能分享,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-12-12Linux下使用shell腳本自動(dòng)執(zhí)行腳本文件
這篇文章主要介紹了Linux下使用shell腳本自動(dòng)執(zhí)行腳本文件的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-12-12Shell腳本制作的終端會(huì)話(huà)回放功能腳本分享
這篇文章主要介紹了Shell腳本制作的終端會(huì)話(huà)回放功能腳本分享,本文分兩個(gè)文件,Record.sh是用來(lái)記錄你所執(zhí)行的命令和屏幕的輸出的,而Replay.sh是用來(lái)回放Record.sh所錄制的內(nèi)容的,需要的朋友可以參考下2014-11-11Shell執(zhí)行/調(diào)用Java/Jar程序例子的實(shí)例詳解
這篇文章主要介紹了Shell執(zhí)行/調(diào)用Java/Jar程序例子的實(shí)例詳解的相關(guān)資料,這里提供實(shí)例幫助大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-08-08