Jas*_*per 189 bash cd-command mkdir
is there any way (what is the easiest way in bash) to combine the following:
mkdir foo
cd foo
Run Code Online (Sandbox Code Playgroud)
的联机帮助页mkdir没有描述类似的内容,也许有一个花哨的版本mkdir?我知道这cd必须是 shell 内置的,所以花哨的也是如此mkdir......
别名?
Zaj*_*ajn 322
我认为创建一个函数是最合适的方法,但为了列出所有替代方法,您可以编写:
mkdir foo && cd "$_"
Run Code Online (Sandbox Code Playgroud)
$_是一个特殊参数,用于保存上一个命令的最后一个参数。周围的引号$_确保即使文件夹名称包含空格也能正常工作。
在某些 shell(例如 )中zsh,$_即使目录名称包含空格,也不需要将 括起来的双引号。bash但是,此命令需要它们才能在 中工作。
例如,在 macOS 10.13.6 上的 bash 3.2.57 中运行此命令:
mkdir foo && cd "$_"
Run Code Online (Sandbox Code Playgroud)
导致此输出:
mkdir "my directory" && cd $_
Run Code Online (Sandbox Code Playgroud)
但是,如果我们$_用双引号括起来,则命令会成功返回。
bash: cd: my: No such file or directory
Run Code Online (Sandbox Code Playgroud)
Ouk*_*uki 153
功能?
mkcdir ()
{
mkdir -p -- "$1" &&
cd -P -- "$1"
}
Run Code Online (Sandbox Code Playgroud)
摆在上面的代码~/.bashrc或由源的另一个文件~/.bashrc。然后重新启动终端以应用更改。
之后只需运行mkcdir foo或mkcdir "nested/path/in quotes"。
笔记:
"$1"是mkcdir命令的第一个参数。如果它有空格或其他特殊字符,它周围的引号会保护参数。--确保新目录的传递名称不会被解释为mkdir或的选项cd,从而有机会创建以-或开头的目录--。-p使用 onmkdir使其创建额外的目录(如果它们尚不存在),并-P使用使cd解析符号链接。Lek*_*eyn 25
Bash(使用单词指示符):
/tmp/bug$ mkdir "some dir"
/tmp/bug$ cd !$
cd "some dir"
/tmp/bug/some dir$
Run Code Online (Sandbox Code Playgroud)
!$扩展到历史记录中上一行的最后一个参数。如果中间有参数,则可以将其!:1用于第一个参数、!:2第二个参数等。
来自 bash(1):
事件指示符
事件指示符是对历史列表中命令行条目的引用。除非引用是绝对的,否则事件是相对于历史列表中的当前位置的。
!开始历史替换,除非后跟空白、换行、回车=或((使用 shopt 内置程序启用 extglob shell 选项时)。[..]
单词指示符
单词指示符用于从事件中选择所需的单词。A
:将事件规范与词指示符分开。[..][..]
n第n个单词。
^第一个论点。即第 1
$个字。最后一个字。这通常是最后一个参数,但如果行中只有一个单词,则会扩展到第零个单词。
小智 10
这些其他小伙子只是让生活变得复杂,这里是:
eval {mkdir,cd}\ FOLDER\;
Run Code Online (Sandbox Code Playgroud)