有什么方法(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 foo
或mkcdir "nested/path/in quotes"
.
笔记:
"$1"
是命令的第一个参数mkcdir
。如果参数包含空格或其他特殊字符,则引号可以保护该参数。--
确保新目录的传递名称不会被解释为mkdir
or 的选项cd
,从而有机会创建以-
or开头的目录--
。-p
used onmkdir
会创建额外的目录(如果它们尚不存在),并且-P
used 会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 隔开。[..][..]
n这n-第一个词。
^
第一个论点。即单词 1。
$
最后一个单词。这通常是最后一个参数,但如果行中只有一个单词,则会扩展到第零个单词。
答案4
这些其他小伙子只是让生活变得复杂,这里是:
eval {mkdir,cd}\ FOLDER\;