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