自定义控件 自定义属性_自定义您的外壳
如果您使用工具的時(shí)間足夠長,則可以掌握其用途。 而且,該工具成為您自己的擴(kuò)展。 想想古斯塔夫·克里姆特(Gustav Klimt)的畫筆,路易斯·阿姆斯特朗(Louis Armstrong)的小號(hào)和馬克·吐溫(Mark Twain)的措辭。 如果您是專家,那么您的“交易工具”會(huì)毫不費(fèi)力地將您的意圖,精神和表達(dá)方式傳達(dá)給您的媒介。
到目前為止,我希望您的技能已經(jīng)達(dá)到UNIX?助手的水平。 您練習(xí)命令行kata。 當(dāng)您渴望知識(shí)時(shí),您會(huì)咨詢無所不知的人的圣言。 然后,您可以設(shè)計(jì)出可以對(duì)數(shù)據(jù)進(jìn)行純粹煉金術(shù)的命令組合。 您可以在命令行上輕松自如,并且外殼感覺舒適而熟悉。
學(xué)徒的下一個(gè)階段,Grasshopper,將是您自己的殼。
強(qiáng)大的外殼
您已經(jīng)了解了許多定制外殼環(huán)境的技術(shù):
- 您可以選擇要使用的UNIX Shell。 伯恩炮彈是堅(jiān)固的。 Z殼等其他產(chǎn)品則提供了新穎和便利的功能,您可能會(huì)發(fā)現(xiàn)有幫助。
要查找UNIX系統(tǒng)上可用的shell,請(qǐng)使用命令cat /etc/shells 。 要將您的外殼更改為列出的任何外殼,請(qǐng)使用chsh命令。 這是更改為Z shell的/ bin / zsh的示例。 (鍵入以粗體顯示的文本。)
$ cat /etc/shells /bin/bash /bin/csh /bin/ksh /bin/sh /bin/tcsh /bin/zsh $ chsh -s /bin/zsh - 您可以創(chuàng)建短別名來代替冗長的命令。
- 環(huán)境變量 (例如PATH(控制搜索程序的位置)和TZ(指定時(shí)區(qū)))會(huì)保留您的首選項(xiàng)并影響您啟動(dòng)的所有進(jìn)程。
PATH特別有用。 例如,如果您想要或需要運(yùn)行本地的,增強(qiáng)的Perl版本,則可以更改PATH,以使用/ usr / local / bin / perl代替/ usr / bin / perl中的(典型)標(biāo)準(zhǔn)版本。
UNIX應(yīng)用程序也經(jīng)常使用環(huán)境變量進(jìn)行自定義 。 例如,如果您的終端(或仿真器)具有功能,則可以使用環(huán)境變量CLICOLOR和LSCOLORS為ls (列表目錄內(nèi)容)的輸出著色。
- 您可以通過外殼程序的內(nèi)置命令歷史記錄保留和重新調(diào)用命令行。 命令歷史記錄保留輸入內(nèi)容,使您可以重新運(yùn)行以前的命令。 許多外殼程序還允許即時(shí)修改先前的命令以創(chuàng)建新命令。 例如,Bash shell使用脫字符號(hào)( ^ )進(jìn)行替換: $ ls -l heroes.txt
-rw-r--r-- 1 strike strike 174 Mar 1 11:25 heroes.txt
$ ^heroes^villains
ls -l villians.txt
villians.txt
在這里,古怪的命令行^heroes^villains替代緊接的先前命令英雄字惡棍 (默認(rèn)值,如果沒有提供歷史記錄列表編號(hào)命令)和運(yùn)行結(jié)果, ls -l villians.txt 。 有關(guān)命令行替換的語法,請(qǐng)查閱您的Shell文檔。
- 如果現(xiàn)有的UNIX實(shí)用程序和Shell的內(nèi)置功能缺少您希望定期使用的功能,則可以編寫Shell腳本以(重新)執(zhí)行復(fù)雜的操作。
正如您將在即將發(fā)表的“ Speaking UNIX”文章中看到的那樣,您還可以下載并構(gòu)建大量其他UNIX實(shí)用程序,這些實(shí)用程序通常以開源形式提供。 實(shí)際上,使用Google或Yahoo! 只需幾分鐘,您通??梢暂p松找到并下載合適的解決方案,而無需自己創(chuàng)建解決方案。 (懶惰!花一些額外的空閑時(shí)間看云。)
當(dāng)然,有了這么多的選項(xiàng)來微調(diào)外殼,如果您可以保留您的首選項(xiàng)并一次又一次地重復(fù)使用這些設(shè)置(從外殼到外殼(例如,在不同的X終端窗口中),會(huì)話到會(huì)話(當(dāng)您注銷并返回再次登錄時(shí)),甚至跨多臺(tái)計(jì)算機(jī)(假設(shè)您在多個(gè)平臺(tái)上使用相同的Shell)。
Shell啟動(dòng)腳本提供了這種耐力。 當(dāng)外殼啟動(dòng)并終止時(shí),外殼分別執(zhí)行一系列腳本來初始化和重置環(huán)境。 有些啟動(dòng)腳本是系統(tǒng)級(jí)的(您的系統(tǒng)管理員可以配置它們),而其他一些則可以自由定制。
啟動(dòng)腳本與Microsoft?Windows?INI文件不同。 顧名思義,啟動(dòng)腳本是真正的Shell腳本,即您編寫的一些小程序即可完成工作。 在這種情況下,每當(dāng)外殼程序啟動(dòng)或終止并影響外殼程序環(huán)境時(shí),外殼程序腳本便會(huì)運(yùn)行。
開始我!
通常,每個(gè)外殼程序提供幾個(gè)外殼程序啟動(dòng)腳本,每個(gè)外殼程序指定腳本運(yùn)行的順序。 至少,您可以期待一個(gè)系統(tǒng)范圍的啟動(dòng)文件和一個(gè)個(gè)人(按用戶)啟動(dòng)文件。 將整個(gè)外殼啟動(dòng)序列視為一種級(jí)聯(lián):運(yùn)行(可能)運(yùn)行多個(gè)腳本的影響是累積的,您可以在后續(xù)腳本中取消或更改序列中早期設(shè)置的參數(shù)。
例如,您的系統(tǒng)管理員可能會(huì)在整個(gè)系統(tǒng)范圍的啟動(dòng)文件中為整個(gè)系統(tǒng)設(shè)置有用的默認(rèn)Shell提示符,例如,其中包括用戶名,當(dāng)前工作目錄和命令歷史記錄號(hào)。 但是,您可以通過根據(jù)自己的啟動(dòng)腳本的喜好重設(shè)shell提示符來覆蓋此文件。 否則,如果您不更改系統(tǒng)范圍的設(shè)置,則該設(shè)置將保留在您的Shell和環(huán)境中。
通常,最早的啟動(dòng)腳本在系統(tǒng)范圍內(nèi),例如/ etc / profile,由系統(tǒng)管理員進(jìn)行管理。 系統(tǒng)范圍的啟動(dòng)文件并非旨在作為入侵,而是有助于使用特定于該系統(tǒng)的資源。 例如,如果您的系統(tǒng)管理員因您解決了已知的安全漏洞而希望您使用較新版本的Secure Shell(SSH)實(shí)用程序,則他或她可以將每個(gè)用戶的初始PATH變量設(shè)置為/ usr / local / bin:/ bin :/ usr / bin,它對(duì)/ usr / local / bin中的可執(zhí)行文件進(jìn)行優(yōu)先級(jí)排序。 (如果在/ usr / local / bin中找不到該命令,則shell將繼續(xù)在/ usr / bin中進(jìn)行掃描。)系統(tǒng)范圍的啟動(dòng)文件還用于命名打印機(jī),顯示有關(guān)計(jì)劃內(nèi)停機(jī)的公告以及提供新用戶具有合理的Shell默認(rèn)值。 (不要欺負(fù)新手。)
在運(yùn)行系統(tǒng)級(jí)腳本(或多個(gè)腳本)之后,外殼程序?qū)⑦\(yùn)行用戶特定的啟動(dòng)腳本。 每個(gè)用戶的文件是保留您喜歡的別名,環(huán)境設(shè)置和其他首選項(xiàng)的合適位置。
規(guī)劃大爆炸
Shell啟動(dòng)腳本的數(shù)量和名稱在一個(gè)外殼之間是不同的。 讓我們看一下Bash shell / bin / bash的啟動(dòng)順序。 Bash shell在所有UNIX和Linux?版本中都可以找到,通常是新系統(tǒng)和新用戶的默認(rèn)Shell。 它也代表了許多其他外殼,因此是一個(gè)很好的演示。 (如果使用其他外殼,請(qǐng)查閱其文檔或手冊(cè)頁以獲取其啟動(dòng)腳本的名稱和處理順序。)
Bash搜索六個(gè)啟動(dòng)腳本,但是每個(gè)腳本都是可選的。 即使所有六個(gè)腳本都存在并且可讀,Bash在任何情況下都只執(zhí)行這六個(gè)腳本的一個(gè)子集。
Bash首先執(zhí)行系統(tǒng)范圍的啟動(dòng)文件/ etc / profile,如果該文件存在并且用戶可以讀取的話。 讀取該文件后,Bash將按該順序查找?/ .bash_profile,?/ .bash_login,?/ .profile和?/ .bashrc,其中~是shell的用戶主目錄的縮寫(也可作為$ HOME使用) )。 如果退出Bash,shell將搜索?/ .bash_logout。
六個(gè)文件中的哪個(gè)執(zhí)行取決于新Shell的“模式”。 外殼程序可以是登錄外殼程序,它可以交互或可以不交互。 (登錄外殼程序也是交互式外殼程序;但是,您可以強(qiáng)制非交互式外殼程序像登錄外殼程序一樣工作。稍后再介紹。)
在過去的UNIX時(shí)代(幾十年前很少),您通常通過啞終端訪問UNIX計(jì)算機(jī)。 您將在登錄提示符下鍵入您的用戶ID和密碼,系統(tǒng)將為您的會(huì)話生成一個(gè)新的登錄Shell。 在此環(huán)境中,登錄外殼程序通過名稱與其他外殼程序?qū)嵗?#xff08;例如運(yùn)行外殼程序腳本的實(shí)例)不同:每個(gè)登錄外殼程序的進(jìn)程名稱均帶有連字符前綴,如-bash 。 這個(gè)特殊的名稱(一個(gè)長期的UNIX工件)告訴外殼程序運(yùn)行任何特殊的登錄配置。
交互式外殼更容易解釋:如果外殼響應(yīng)您的輸入(標(biāo)準(zhǔn)輸入)并顯示輸出(標(biāo)準(zhǔn)輸出),則它是交互式的。 今天,X終端取代了啞終端,但是外殼模式的約定和范例仍然存在。 通常,X終端將Bash生成為-bash ,這將強(qiáng)制Bash執(zhí)行登錄啟動(dòng)序列。
對(duì)于Bash,交互式登錄Shell運(yùn)行/ etc / profile(如果存在)。 (如果將Bash作為bash --login調(diào)用,則非交互式shell也將運(yùn)行/ etc / profile。)接下來,交互式登錄shell將查找?/ .bash_profile并執(zhí)行此腳本(如果存在且可讀)。 否則,shell將繼續(xù)嘗試執(zhí)行?/ .bash_login。 如果后一個(gè)文件不存在或不可讀,則Bash最終嘗試執(zhí)行?/ .profile。 Bash僅運(yùn)行一個(gè)個(gè)人啟動(dòng)文件,啟動(dòng)順序此后立即停止。 當(dāng)Bash登錄shell退出時(shí),它將執(zhí)行?/ .bash_logout。
如果Bash Shell是交互式的,而不是登錄Shell,則Bash嘗試讀取?/ .bashrc。 沒有其他文件被執(zhí)行。 如果Bash Shell是非交互式的,則它將擴(kuò)展BASH_ENV環(huán)境變量的值并執(zhí)行命名的文件。
當(dāng)然,您可以通過從Bash的標(biāo)準(zhǔn)腳本中調(diào)用自己的腳本來提供其他設(shè)置。 特殊的shell縮寫. (或其同義詞source )執(zhí)行另一個(gè)shell腳本。 例如,如果要在交互式登錄外殼程序和交互式非登錄外殼程序之間共享?/ .bashrc中的設(shè)置,請(qǐng)放置以下命令:
. ~/.bashrc在?/ .bash_profile中。 當(dāng)外殼程序遇到dot命令時(shí),它將立即執(zhí)行命名的外殼程序腳本。
窺視外殼
探索啟動(dòng)順序的最佳方法是創(chuàng)建一些簡單的Shell啟動(dòng)文件。 例如,如果運(yùn)行ssh farfaraway ls命令,SSH在遠(yuǎn)程系統(tǒng)上產(chǎn)生的遠(yuǎn)程shell名為farfaraway是登錄shell嗎? 交互式外殼? 讓我們找出答案。
列表1 , 2 , 3 ,和4示出了樣品/ etc / profile中,?/ .bash_profile中,?/ .bashrc中,和?/ .bash_logout中的文件,分別。 (如果這些文件已經(jīng)存在,請(qǐng)?jiān)诶^續(xù)練習(xí)之前進(jìn)行備份。您需要計(jì)算機(jī)上的超級(jí)用戶特權(quán)才能更改/ etc / profile。)使用喜歡的文本編輯器來創(chuàng)建文件,如圖所示。
清單1顯示了一個(gè)示例/ etc / profile腳本。 該文件是第一個(gè)運(yùn)行的啟動(dòng)文件(如果存在并且可讀)。
清單1.示例/ etc / profile文件
echo "Executing /etc/profile." PATH="/bin:/sbin:/usr/bin:/usr/sbin" export PATH清單1在腳本開始時(shí)回顯了一條消息,并設(shè)置了一個(gè)最小的PATH變量。 同樣,如果外殼是交互式登錄外殼,則此文件將運(yùn)行。 例如,啟動(dòng)一個(gè)新的X終端。 您應(yīng)該會(huì)看到以下內(nèi)容:
Last login: Tue Apr 17 21:06:23 on ttyp1 Executing /etc/profile (Interactive, login shell) Executing /Users/strike/.bash_profile (Interactive, login shell) Including /Users/strike/.aliases strike @ blackcat 1 $好! 這是在X終端中啟動(dòng)新的登錄Shell時(shí)的預(yù)期順序。 注意shell提示:它反映了用戶名,短主機(jī)名(第一個(gè)點(diǎn)之前的所有內(nèi)容)和命令號(hào)。
如果在提示符下鍵入logout或exit ,則應(yīng)該看到以下內(nèi)容:
strike @ blackcat 31 $ logout Executing /Users/strike/.bash_logout (Interactive, login shell)如前所述,交互式登錄Shell運(yùn)行?/ .bash_logout。
清單2顯示了一個(gè)?/ .bash_profile文件示例。 此文件是用于在啟動(dòng)時(shí)自定義外殼程序的一個(gè)選項(xiàng)。
清單2:?/ .bash_profile文件樣本
echo "Executing $HOME/.bash_profile" echo '(Interactive, login shell)'PS1='\u @ \h \# \$ ' export PS1PAGER=/usr/bin/less export PAGER. .aliases接下來,讓我們看看從提示啟動(dòng)新外殼時(shí)會(huì)發(fā)生什么。 新的外殼程序是交互式的,但不是登錄外殼程序。 根據(jù)規(guī)則,?/ .bashrc是唯一可以運(yùn)行的文件。
strike @ blackcat 1 $ bash Executing /Users/strike/.bashrc (Interactive shell) blackcat:~ strike$而且,實(shí)際上,?/ .bashrc是唯一要執(zhí)行的文件。 證明在提示中-底部的提示是默認(rèn)的Bash提示,而不是?/ .bash_profile中定義的提示。
要測(cè)試注銷腳本,請(qǐng)鍵入exit (您不能在非登錄shell中鍵入logout )。 您應(yīng)該看到:
blackcat:~ strike$ exit exit Executing $HOME/.bash_logout (Interactive, login shell) strike @ blackcat 2 $交互式登錄外殼終止時(shí),它將執(zhí)行?/ .bash_logout。 您可能會(huì)使用此功能來刪除臨時(shí)文件,將文件作為一種簡單的備份方法進(jìn)行復(fù)制,甚至可能啟動(dòng)rsync來分發(fā)在當(dāng)前會(huì)話中所做的所有更改。
清單3顯示了一個(gè)?/ .bashrc文件示例。 該文件是非交互式Bash Shell實(shí)例的初始化文件。
清單3:示例?/ .bashrc文件
echo "Executing $HOME/.bashrc" echo "(Interactive shell)"PATH="/usr/local/bin:$PATH" export PATH這是另一個(gè)實(shí)驗(yàn):運(yùn)行SSH時(shí)會(huì)得到哪種外殼? 讓我們嘗試兩種變體。 (您可以簡單地使用SSH返回本地計(jì)算機(jī),其工作方式與從遠(yuǎn)程計(jì)算機(jī)上運(yùn)行SSH的方式相同。)首先,使用SSH登錄到遠(yuǎn)程計(jì)算機(jī):
strike @ blackcat 1 $ ssh blackcat Last login: Tue Apr 17 21:17:35 2007 Executing /etc/profile (Interactive, login shell) Executing /Users/strike/.bash_profile (Interactive, login shell) Including /Users/strike/.aliases strike @ blackcat 1 $如您所料,運(yùn)行SSH訪問遠(yuǎn)程計(jì)算機(jī)會(huì)啟動(dòng)一個(gè)新的登錄Shell。 接下來,在遠(yuǎn)程計(jì)算機(jī)上運(yùn)行命令時(shí)會(huì)發(fā)生什么? 答案是:
strike @ blackcat 3 $ ssh blackcat ls Executing /Users/strike/.bashrc (Interactive shell) villians.txt heroes.txt使用SSH遠(yuǎn)程運(yùn)行命令會(huì)生成非登錄交互式外殼。 為什么互動(dòng)? 因?yàn)檫h(yuǎn)程命令的標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出已綁定到您的鍵盤和顯示器,盡管使用了SSH魔術(shù)。
清單4顯示?/ .bash_logout。 該文件在外殼終止時(shí)運(yùn)行。
清單4:示例?/ .bash_logout文件
echo "Executing $HOME/.bash_logout" echo "(Interactive, login shell)"啟動(dòng)文件的有用提示
您使用Shell的次數(shù)越多,則可以將首選項(xiàng)保留在啟動(dòng)文件中而受益匪淺。 以下是一些有關(guān)組織Bash設(shè)置的有用提示和建議。 (您可以將類似的策略應(yīng)用于其他shell。)
- 如果您有要在每個(gè)shell中使用的設(shè)置(例如PATH)(無論其模式如何),請(qǐng)將這些設(shè)置放在?/ .bashrc中,并使用source從?/ .bash_profile中訪問文件。
- 如果您在多臺(tái)計(jì)算機(jī)上擁有帳戶(并且您的主目錄未通過網(wǎng)絡(luò)文件系統(tǒng)[NFS]在它們之間共享),請(qǐng)使用rsync使Shell啟動(dòng)文件在網(wǎng)絡(luò)上的所有計(jì)算機(jī)之間保持同步。
- 如果根據(jù)所使用的主機(jī)應(yīng)用某些首選項(xiàng)(例如,如果一個(gè)系統(tǒng)具有特殊資源,則使用不同的PATH),請(qǐng)將這些設(shè)置放在單獨(dú)的文件中,并在shell啟動(dòng)過程中使用source來訪問它。 如果選擇使用rsync管理文件,請(qǐng)從文件分發(fā)列表中省略特定于主機(jī)的文件。
當(dāng)然,您也可以創(chuàng)建一個(gè)全局腳本,并使用條件語句和環(huán)境變量HOSTNAME選擇適當(dāng)?shù)脑O(shè)置。 (HOSTNAME由外殼程序自動(dòng)設(shè)置,并捕獲標(biāo)準(zhǔn)主機(jī)名。)例如,以下是啟動(dòng)文件中常見的有用片段:
case $HOSTNAME inlab.area51.org) PATH=/opt/rocketscience/bin:$PATHPS1='\u @ \h \# \$ 'export $PS1;;alien.area51.org)PATH=/opt/alien/sw/bin:$PATH;;saucer*)PATH=/opt/saucer/bin:$PATHPAGER=lessexport $PAGER;;*) PATH=/usr/local/bin:$PATH esacexport $PATH這里的構(gòu)造是一個(gè)switch語句,用于將$ HOSTNAME的值與四個(gè)可能的值進(jìn)行比較:lab.area51.org,Alien.area51.org,該模式匹配以文字字符串saucer*開頭的任何主機(jī)名(例如碟型火星會(huì)匹配;主機(jī)名(例如sauce.tomato.org不會(huì))以及其他所有內(nèi)容。 在這里,對(duì)于Bash,星號(hào)(*)被解釋為shell運(yùn)算符,而不是正則表達(dá)式運(yùn)算符。 當(dāng)對(duì)其中一種模式進(jìn)行匹配時(shí),將執(zhí)行與該模式相關(guān)聯(lián)的語句。 與其他switch語句不同,Bash的情況僅運(yùn)行一組語句。
最后,查看其他用戶的Shell啟動(dòng)文件以獲取靈感并節(jié)省汗水。 (不過,有些用戶保護(hù)了這些文件及其主目錄,這使您無法瀏覽。)Joe會(huì)有一個(gè)很酷,有用的提示嗎? 詢問如何實(shí)現(xiàn)同一件事。 Jeanette是否具有功能強(qiáng)大的鍵盤加速器或大量環(huán)境變量,以從實(shí)用程序中獲得特殊功能? 與她聊天,詢問有關(guān)食譜的信息。 想法和代碼的最佳來源來自經(jīng)驗(yàn)豐富的命令行從業(yè)人員。
自定義您的外殼
調(diào)節(jié)器和改裝器,團(tuán)結(jié)起來! 您可以廣泛地自定義外殼,找到所需的設(shè)置或一系列設(shè)置后,將它們保存在啟動(dòng)文件中以再次使用。 使用rsync或類似工具將環(huán)境從一臺(tái)計(jì)算機(jī)傳播到另一臺(tái)計(jì)算機(jī)。
您的課程已完成。 是時(shí)候購買更多片了。
翻譯自: https://www.ibm.com/developerworks/aix/library/au-speakingunix10/index.html
總結(jié)
以上是生活随笔為你收集整理的自定义控件 自定义属性_自定义您的外壳的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux桌面图标不见_Ubuntu系统
- 下一篇: DS1819 对应版本的FFMPEG_使