100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 自定义控件 自定义属性_自定义您的外壳

自定义控件 自定义属性_自定义您的外壳

时间:2021-04-27 00:43:55

相关推荐

自定义控件 自定义属性_自定义您的外壳

如果您使用工具的时间足够长,则可以掌握其用途。 而且,该工具成为您自己的扩展。 想想古斯塔夫·克里姆特(Gustav Klimt)的画笔,路易斯·阿姆斯特朗(Louis Armstrong)的小号和马克·吐温(Mark Twain)的措辞。 如果您是专家,那么您的“交易工具”会毫不费力地将您的意图,精神和表达方式传达给您的媒介。

到目前为止,我希望您的技能已经达到UNIX®助手的水平。 您练习命令行kata。 当您渴望知识时,您会咨询无所不知的人的圣言。 然后,您可以设计出可以对数据进行纯粹炼金术的命令组合。 您可以在命令行上轻松自如,并且外壳感觉舒适而熟悉。

学徒的下一个阶段,Grasshopper,将是您自己的壳。

强大的外壳

您已经了解了许多定制外壳环境的技术:

您可以选择要使用的UNIX Shell。 伯恩炮弹是坚固的。 Z壳等其他产品则提供了新颖和便利的功能,您可能会发现有帮助。

要查找UNIX系统上可用的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

您可以创建短别名来代替冗长的命令。 环境变量 (例如PATH(控制搜索程序的位置)和TZ(指定时区))会保留您的首选项并影响您启动的所有进程。

PATH特别有用。 例如,如果您想要或需要运行本地的,增强的Perl版本,则可以更改PATH,以使用/ usr / local / bin / perl代替/ usr / bin / perl中的(典型)标准版本。

UNIX应用程序也经常使用环境变量进行自定义 。 例如,如果您的终端(或仿真器)具有功能,则可以使用环境变量CLICOLOR和LSCOLORS为ls(列表目录内容)的输出着色。

您可以通过外壳程序的内置命令历史记录保留和重新调用命令行。 命令历史记录保留输入内容,使您可以重新运行以前的命令。 许多外壳程序还允许即时修改先前的命令以创建新命令。 例如,Bash shell使用脱字符号(^)进行替换:

$ ls -l heroes.txt-rw-r--r-- 1 strike strike 174 Mar 1 11:25 heroes.txt$ ^heroes^villainsls -l villians.txt villians.txt

在这里,古怪的命令行^heroes^villains替代紧接的先前命令英雄字恶棍 (默认值,如果没有提供历史记录列表编号命令)和运行结果,ls -l villians.txt。 有关命令行替换的语法,请查阅您的Shell文档。

如果现有的UNIX实用程序和Shell的内置功能缺少您希望定期使用的功能,则可以编写Shell脚本以(重新)执行复杂的操作。

正如您将在即将发表的“ Speaking UNIX”文章中看到的那样,您还可以下载并构建大量其他UNIX实用程序,这些实用程序通常以开源形式提供。 实际上,使用Google或Yahoo! 只需几分钟,您通常可以轻松找到并下载合适的解决方案,而无需自己创建解决方案。 (懒惰!花一些额外的空闲时间看云。)

当然,有了这么多的选项来微调外壳,如果您可以保留您的首选项并一次又一次地重复使用这些设置(从外壳到外壳(例如,在不同的X终端窗口中),会话到会话(当您注销并返回再次登录时),甚至跨多台计算机(假设您在多个平台上使用相同的Shell)。

Shell启动脚本提供了这种耐力。 当外壳启动并终止时,外壳分别执行一系列脚本来初始化和重置环境。 有些启动脚本是系统级的(您的系统管理员可以配置它们),而其他一些则可以自由定制。

启动脚本与Microsoft®Windows®INI文件不同。 顾名思义,启动脚本是真正的Shell脚本,即您编写的一些小程序即可完成工作。 在这种情况下,每当外壳程序启动或终止并影响外壳程序环境时,外壳程序脚本便会运行。

开始我!

通常,每个外壳程序提供几个外壳程序启动脚本,每个外壳程序指定脚本运行的顺序。 至少,您可以期待一个系统范围的启动文件和一个个人(按用户)启动文件。 将整个外壳启动序列视为一种级联:运行(可能)运行多个脚本的影响是累积的,您可以在后续脚本中取消或更改序列中早期设置的参数。

例如,您的系统管理员可能会在整个系统范围的启动文件中为整个系统设置有用的默认Shell提示符,例如,其中包括用户名,当前工作目录和命令历史记录号。 但是,您可以通过根据自己的启动脚本的喜好重设shell提示符来覆盖此文件。 否则,如果您不更改系统范围的设置,则该设置将保留在您的Shell和环境中。

通常,最早的启动脚本在系统范围内,例如/ etc / profile,由系统管理员进行管理。 系统范围的启动文件并非旨在作为入侵,而是有助于使用特定于该系统的资源。 例如,如果您的系统管理员因您解决了已知的安全漏洞而希望您使用较新版本的Secure Shell(SSH)实用程序,则他或她可以将每个用户的初始PATH变量设置为/ usr / local / bin:/ bin :/ usr / bin,它对/ usr / local / bin中的可执行文件进行优先级排序。 (如果在/ usr / local / bin中找不到该命令,则shell将继续在/ usr / bin中进行扫描。)系统范围的启动文件还用于命名打印机,显示有关计划内停机的公告以及提供新用户具有合理的Shell默认值。 (不要欺负新手。)

在运行系统级脚本(或多个脚本)之后,外壳程序将运行用户特定的启动脚本。 每个用户的文件是保留您喜欢的别名,环境设置和其他首选项的合适位置。

规划大爆炸

Shell启动脚本的数量和名称在一个外壳之间是不同的。 让我们看一下Bash shell / bin / bash的启动顺序。 Bash shell在所有UNIX和Linux®版本中都可以找到,通常是新系统和新用户的默认Shell。 它也代表了许多其他外壳,因此是一个很好的演示。 (如果使用其他外壳,请查阅其文档或手册页以获取其启动脚本的名称和处理顺序。)

Bash搜索六个启动脚本,但是每个脚本都是可选的。 即使所有六个脚本都存在并且可读,Bash在任何情况下都只执行这六个脚本的一个子集。

Bash首先执行系统范围的启动文件/ etc / profile,如果该文件存在并且用户可以读取的话。 读取该文件后,Bash将按该顺序查找〜/ .bash_profile,〜/ .bash_login,〜/ .profile和〜/ .bashrc,其中~是shell的用户主目录的缩写(也可作为$ HOME使用) )。 如果退出Bash,shell将搜索〜/ .bash_logout。

六个文件中的哪个执行取决于新Shell的“模式”。 外壳程序可以是登录外壳程序,它可以交互或可以不交互。 (登录外壳程序也是交互式外壳程序;但是,您可以强制非交互式外壳程序像登录外壳程序一样工作。稍后再介绍。)

在过去的UNIX时代(几十年前很少),您通常通过哑终端访问UNIX计算机。 您将在登录提示符下键入您的用户ID和密码,系统将为您的会话生成一个新的登录Shell。 在此环境中,登录外壳程序通过名称与其他外壳程序实例(例如运行外壳程序脚本的实例)不同:每个登录外壳程序的进程名称均带有连字符前缀,如-bash。 这个特殊的名称(一个长期的UNIX工件)告诉外壳程序运行任何特殊的登录配置。

交互式外壳更容易解释:如果外壳响应您的输入(标准输入)并显示输出(标准输出),则它是交互式的。 今天,X终端取代了哑终端,但是外壳模式的约定和范例仍然存在。 通常,X终端将Bash生成为-bash,这将强制Bash执行登录启动序列。

对于Bash,交互式登录Shell运行/ etc / profile(如果存在)。 (如果将Bash作为bash --login调用,则非交互式shell也将运行/ etc / profile。)接下来,交互式登录shell将查找〜/ .bash_profile并执行此脚本(如果存在且可读)。 否则,shell将继续尝试执行〜/ .bash_login。 如果后一个文件不存在或不可读,则Bash最终尝试执行〜/ .profile。 Bash仅运行一个个人启动文件,启动顺序此后立即停止。 当Bash登录shell退出时,它将执行〜/ .bash_logout。

如果Bash Shell是交互式的,而不是登录Shell,则Bash尝试读取〜/ .bashrc。 没有其他文件被执行。 如果Bash Shell是非交互式的,则它将扩展BASH_ENV环境变量的值并执行命名的文件。

当然,您可以通过从Bash的标准脚本中调用自己的脚本来提供其他设置。 特殊的shell缩写.(或其同义词source)执行另一个shell脚本。 例如,如果要在交互式登录外壳程序和交互式非登录外壳程序之间共享〜/ .bashrc中的设置,请放置以下命令:

. ~/.bashrc

在〜/ .bash_profile中。 当外壳程序遇到dot命令时,它将立即执行命名的外壳程序脚本。

窥视外壳

探索启动顺序的最佳方法是创建一些简单的Shell启动文件。 例如,如果运行ssh farfaraway ls命令,SSH在远程系统上产生的远程shell名为farfaraway是登录shell吗? 交互式外壳? 让我们找出答案。

列表1 , 2 , 3 ,和4示出了样品/ etc / profile中,〜/ .bash_profile中,〜/ .bashrc中,和〜/ .bash_logout中的文件,分别。 (如果这些文件已经存在,请在继续练习之前进行备份。您需要计算机上的超级用户特权才能更改/ etc / profile。)使用喜欢的文本编辑器来创建文件,如图所示。

清单1显示了一个示例/ etc / profile脚本。 该文件是第一个运行的启动文件(如果存在并且可读)。

清单1.示例/ etc / profile文件

echo "Executing /etc/profile."PATH="/bin:/sbin:/usr/bin:/usr/sbin"export PATH

清单1在脚本开始时回显了一条消息,并设置了一个最小的PATH变量。 同样,如果外壳是交互式登录外壳,则此文件将运行。 例如,启动一个新的X终端。 您应该会看到以下内容:

Last login: Tue Apr 17 21:06:23 on ttyp1Executing /etc/profile(Interactive, login shell)Executing /Users/strike/.bash_profile(Interactive, login shell)Including /Users/strike/.aliasesstrike @ blackcat 1 $

好! 这是在X终端中启动新的登录Shell时的预期顺序。 注意shell提示:它反映了用户名,短主机名(第一个点之前的所有内容)和命令号。

如果在提示符下键入logoutexit,则应该看到以下内容:

strike @ blackcat 31 $ logoutExecuting /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/lessexport PAGER. .aliases

接下来,让我们看看从提示启动新外壳时会发生什么。 新的外壳程序是交互式的,但不是登录外壳程序。 根据规则,〜/ .bashrc是唯一可以运行的文件。

strike @ blackcat 1 $ bashExecuting /Users/strike/.bashrc(Interactive shell)blackcat:~ strike$

而且,实际上,〜/ .bashrc是唯一要执行的文件。 证明在提示中-底部的提示是默认的Bash提示,而不是〜/ .bash_profile中定义的提示。

要测试注销脚本,请键入exit(您不能在非登录shell中键入logout)。 您应该看到:

blackcat:~ strike$ exitexitExecuting $HOME/.bash_logout(Interactive, login shell)strike @ blackcat 2 $

交互式登录外壳终止时,它将执行〜/ .bash_logout。 您可能会使用此功能来删除临时文件,将文件作为一种简单的备份方法进行复制,甚至可能启动rsync来分发在当前会话中所做的所有更改。

清单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 blackcatLast login: Tue Apr 17 21:17:35 Executing /etc/profile(Interactive, login shell)Executing /Users/strike/.bash_profile(Interactive, login shell)Including /Users/strike/.aliasesstrike @ blackcat 1 $

如您所料,运行SSH访问远程计算机会启动一个新的登录Shell。 接下来,在远程计算机上运行命令时会发生什么? 答案是:

strike @ blackcat 3 $ ssh blackcat lsExecuting /Users/strike/.bashrc(Interactive shell)villians.txtheroes.txt

使用SSH远程运行命令会生成非登录交互式外壳。 为什么互动? 因为远程命令的标准输入和标准输出已绑定到您的键盘和显示器,尽管使用了SSH魔术。

清单4显示〜/ .bash_logout。 该文件在外壳终止时运行。

清单4:示例〜/ .bash_logout文件

echo "Executing $HOME/.bash_logout"echo "(Interactive, login shell)"

启动文件的有用提示

您使用Shell的次数越多,则可以将首选项保留在启动文件中而受益匪浅。 以下是一些有关组织Bash设置的有用提示和建议。 (您可以将类似的策略应用于其他shell。)

如果您有要在每个shell中使用的设置(例如PATH)(无论其模式如何),请将这些设置放在〜/ .bashrc中,并使用source从〜/ .bash_profile中访问文件。 如果您在多台计算机上拥有帐户(并且您的主目录未通过网络文件系统[NFS]在它们之间共享),请使用rsync使Shell启动文件在网络上的所有计算机之间保持同步。 如果根据所使用的主机应用某些首选项(例如,如果一个系统具有特殊资源,则使用不同的PATH),请将这些设置放在单独的文件中,并在shell启动过程中使用source来访问它。 如果选择使用rsync管理文件,请从文件分发列表中省略特定于主机的文件。

当然,您也可以创建一个全局脚本,并使用条件语句和环境变量HOSTNAME选择适当的设置。 (HOSTNAME由外壳程序自动设置,并捕获标准主机名。)例如,以下是启动文件中常见的有用片段:

case $HOSTNAME )PATH=/opt/rocketscience/bin:$PATHPS1='\u @ \h \# \$ 'export $PS1;;)PATH=/opt/alien/sw/bin:$PATH;;saucer*)PATH=/opt/saucer/bin:$PATHPAGER=lessexport $PAGER;;*) PATH=/usr/local/bin:$PATHesacexport $PATH

这里的构造是一个switch语句,用于将$ HOSTNAME的值与四个可能的值进行比较:,,该模式匹配以文字字符串saucer*开头的任何主机名(例如碟型火星会匹配;主机名(例如不会)以及其他所有内容。 在这里,对于Bash,星号(*)被解释为shell运算符,而不是正则表达式运算符。 当对其中一种模式进行匹配时,将执行与该模式相关联的语句。 与其他switch语句不同,Bash的情况仅运行一组语句。

最后,查看其他用户的Shell启动文件以获取灵感并节省汗水。 (不过,有些用户保护了这些文件及其主目录,这使您无法浏览。)Joe会有一个很酷,有用的提示吗? 询问如何实现同一件事。 Jeanette是否具有功能强大的键盘加速器或大量环境变量,以从实用程序中获得特殊功能? 与她聊天,询问有关食谱的信息。 想法和代码的最佳来源来自经验丰富的命令行从业人员。

自定义您的外壳

调节器和改装器,团结起来! 您可以广泛地自定义外壳,找到所需的设置或一系列设置后,将它们保存在启动文件中以再次使用。 使用rsync或类似工具将环境从一台计算机传播到另一台计算机。

您的课程已完成。 是时候购买更多片了。

翻译自: /developerworks/aix/library/au-speakingunix10/index.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。