无法理解.bashrc中的一行

时间:2009-04-27 14:05:35

标签: bash

我在someone's .bashrc

中找到了以下代码
# Source global definitions 
[ -f /etc/bashrc ] && . /etc/bashrc

这显然导致了我的Bash重复。

单线是什么意思?

4 个答案:

答案 0 :(得分:11)

检查文件/ etc / bashrc是否存在,如果检查成功则执行它。 dot命令是'source'命令的别名。

答案 1 :(得分:8)

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

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

它实际上被称为“AND List Construct”。

请参阅here了解更多信息。

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

make && make install

只有在make成功完成后才会安装。

答案 2 :(得分:8)

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

test -f /etc/bashrc && source /etc/bashrc

.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

首先,你注意到“root”之前的“2​​”。这意味着有两个目录条目(a.k.a文件名)指向相同的数据(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)

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

回声测试>的/ dev / tty1上

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

答案 3 :(得分:2)

我不确定你为什么不在这里问:) http://comments.pixelbeat.org/settings/

该命令的更详细的等价物是:

if test -r /etc/bashrc; then
 source /etc/bashrc
fi