以下 bash 命令中的 !#(感叹号哈希)、!$:r:r(感叹号美元冒号 r)、!#:t(感叹号哈希冒号 t)是什么意思?

以下 bash 命令中的 !#(感叹号哈希)、!$:r:r(感叹号美元冒号 r)、!#:t(感叹号哈希冒号 t)是什么意思?

我一直在尝试安装 Nagios 软件包,并在指南上偶然发现了这些奇怪的 bash 扩展这里。有人可以帮助我理解扩展的含义吗?维基链接也有助于将来参考。

root@z:~> wget http://mathias-kettner.de/download/check_mk-1.1.7i5.tar.gz
root@z:~> tar zxvf !#:t
root@z:~> chown -R root:root !$:r:r && chmod -R o-w !$:r:r && cd !$:r:r
root@z:~/check_mk-1.1.7i5> ./setup.sh

答案1

这些都是bash历史扩展关键词。他们从 shell 历史记录中选择一行并重新插入(部分)它(可能在修改后)。您链接到的网站对它们进行了合理的解释,但它并没有描述所有这些内容。

tar zxvf !#:t

实际上没有意义:!#选择到目前为止键入的行,但tar zxvf我们不想重复使用其中任何一个。它应该是

tar zxvf !$:t

它选择上一行的最后一部分 ( !$),这是给 的 URL wget,并获取文件名部分(:t,代表 tail - 严格来说,它是最后一个目录分隔符 后剩下的内容,/它恰好与 URL 配合得很好)。

然后

chown -R root:root !$:r:r

选择上一行的最后一部分,删除文件扩展名(:r严格来说,它会删除最后一个之后的所有内容.,包括.)两次,这给出了目录名称(假设 tarball 包含一个与 tarball 的基本名称同名的目录) )。chmod和命令cd以相同的方式进行。

相关内容