事件指示符

事件指示符

有什么方法(bash 中最简单的方法是什么)来组合以下内容:

mkdir foo
cd foo

的联机帮助页mkdir没有描述类似的内容,也许有一个奇特的版本mkdir?我知道这cd必须是 shell 内置的,所以对于花哨的东西来说也是如此mkdir......

别名?

答案1

我认为创建一个函数是执行此操作的最合适方法,但只是为了列出所有替代方法,您可以编写:

mkdir foo && cd "$_"

$_是一个特殊参数,保存前一个命令的最后一个参数。即使文件夹名称包含空格,引号$_也能确保它正常工作。

为什么使用双引号?

在某些 shell 中,例如,即使目录名包含空格,也不需要用zsh双引号括起。但是$_,此命令需要它们才能在 中工作bash

例如,在 macOS 10.13.6 上的 bash 3.2.57 中运行以下命令:

mkdir "my directory" && cd $_

结果是这样的输出:

bash: cd: my: No such file or directory

但是,如果我们$_用双引号引起来,该命令将成功返回。

bash-3.2$ mkdir "my directory" && cd "$_"
bash-3.2$ echo $?
0
bash-3.2$

答案2

功能?

mkcdir ()
{
    mkdir -p -- "$1" &&
       cd -P -- "$1"
}

将上述代码放入~/.bashrc~/.zshrc由您的 shell 提供的另一个文件中。然后通过运行例如source ~/.bashrc来应用更改来获取它。

之后只需运行mkcdir foomkcdir "nested/path/in quotes".

笔记:

  • "$1"是命令的第一个参数mkcdir。如果参数包含空格或其他特殊字符,则引号可以保护该参数。
  • --确保新目录的传递名称不会被解释为mkdiror 的选项cd,从而有机会创建以-or开头的目录--
  • -pused onmkdir会创建额外的目录(如果它们尚不存在),并且-Pused 会cd解析符号链接。
  • 您也可以重新启动终端模拟器/shell,而不是source-ing rc。

答案3

Bash(使用单词指示符):

/tmp/bug$ mkdir "some dir"
/tmp/bug$ cd !$
cd "some dir"
/tmp/bug/some dir$ 

!$扩展到历史记录中上一行的最后一个参数。如果中间有参数,则可以用于!:1第一个参数、!:2第二个参数等。

来自 bash(1):

事件指示符

事件指示符是对历史列表中命令行条目的引用。除非引用是绝对的,否则事件是相对于历史列表中的当前位置的。

! 启动历史记录替换,除非后面跟有空格、换行符、回车符或=(当使用内置 shopt 启用 extglob shell 选项时)。

[..]

词指示符

单词指示符用于从事件中选择所需的单词。:事件规范与单词指示符之间用 A 隔开。[..]

[..]
nn-第一个词。
^ 第一个论点。即单词 1。
$ 最后一个单词。这通常是最后一个参数,但如果行中只有一个单词,则会扩展到第零个单词。

答案4

这些其他小伙子只是让生活变得复杂,这里是:

eval {mkdir,cd}\ FOLDER\;

相关内容