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)
归档时间: |
|
查看次数: |
126394 次 |
最近记录: |