无法理解.bashrc中的一行

Léo*_* 준영 2 bash

我在某人的.bashrc中找到了以下代码

# Source global definitions 
[ -f /etc/bashrc ] && . /etc/bashrc
Run Code Online (Sandbox Code Playgroud)

它显然导致我的Bash重复很多.

单线是什么意思?

hvi*_*tus 11

它检查文件/ etc/bashrc的存在,并在检查成功时执行它.dot命令是'source'命令的别名.


alk*_*kar 8

如果/ etc/bashrc存在(-f operator)执行它.

这是因为&&(逻辑AND运算符)仅在第一个参数为真时(为了加速)计算第二个参数.所以,如果该文件存在,请运行它!

它实际上被称为"AND List Construct".

请参阅此处了解更多信息.

您也可以考虑以下常用示例:

make && make install
Run Code Online (Sandbox Code Playgroud)

它仅在make成功完成时才安装.


Aar*_*lla 8

可能让你困惑的[是:实际上是一个Unix shell命令.你可以找到它,/bin当你仔细观察时,它是test命令的硬链接,这意味着你也可以写:

test -f /etc/bashrc && source /etc/bashrc
Run Code Online (Sandbox Code Playgroud)

(.是一个快捷方式source).

你的娱乐历史记录:当Unix被发明时,没有屏幕,但"电传手机"是一种打字机.您向Unix主机发送了一个命令,电传打字机将打印结果.谣言是这样的:由于早期的Unix开发人员厌倦了所创建的电话类型的所有球拍,他们试图将所有命令缩短为两个字母,并将所有选项缩短为单个字母.

如果你是绿色,那么谣言是:为了节省纸张和墨带,他们试图将所有命令缩短为两个字母,将所有选项缩短为一个字母.

如果你研究一下/dev,你会看到所有那些tty文件是原始电传类型中唯一剩下的东西.

[编辑]如何弄清楚那是[test同样的事情:

这是一个两步过程.ls -il [ test echo得到:

356954 -r-xr-xr-x 2 root wheel 46K May 31 2008 [
356954 -r-xr-xr-x 2 root wheel 46K May 31 2008 test
67392  -rwxr-xr-x 1 root wheel 18K Sep 22 2007 echo
Run Code Online (Sandbox Code Playgroud)

首先,你注意到"root"之前的"2​​".这意味着有两个目录条目(也称为文件名)指向相同的数据(Unix术语:inode,i-node或"索引节点").磁盘上的每个inode都有一个唯一的编号,这是上例中的第一个编号(356954).您可以看到[test共享相同的inode,但echo没有.

请注意,没有快速方法可以获取指向同一inode的所有目录条目.您必须在整个文件系统中搜索具有相同inode的条目(使用find /path -inode 356954)

[EDIT2]至于tty"文件":这些实际上是设备节点.权限的第一个字母是"c",如"字符设备"中所示.你可以找到文件" - ",目录"d"和块设备"b"(如硬盘,软盘等).这不是一个文件,但它确实是一个程序.您可以通过向其发送数据("写入"文件中的某些内容)或从中读取数据来与之通信.这个概念似乎与真实文件非常接近,Unix发明者使用文件API和称为"IO控制"(或ioctl)的东西来发送特殊命令(比如查询终端的大小).

如果切换到控制台模式("Ctrl-Alt-F1"),您将看到如下内容:

Welcome to .... - Kernel .... (tty1)
Run Code Online (Sandbox Code Playgroud)

切换到另一个控制台(使用Alt-F2 ... Alt-F6),您将看到它们已连接tty2tty6.登录其中一个并尝试

echo test>/dev/tty1

并且字符串将出现在连接到的控制台上tty1.从tty读取是不容易的,因为已经有一个程序读取它(mingetty只要你没有登录loginbash登录后).如果你尝试read line < /dev/tty1,那将与已经在该控制台上运行的程序冲突但原则上它会起作用.