我在macOS X上使用Bash,我想创建一个简单的可执行脚本文件,该文件在运行时会更改为另一个目录。但是,该目录的路径中包含空格。你怎么做到这一点?这就是我的......
档案名称:cdcode
文件内容:
cd ~/My Code
现在被授予,这不是一个长路径名,但我的实际路径名是五个目录深,其中四个目录在路径中有空格。
顺便说一句,我已经尝试了cd "~/My Code"
和cd "~/My\ Code"
,但这些都没有奏效。
答案 0 :(得分:75)
当您双引号路径时,您将停止波浪号扩展。所以有几种方法可以做到这一点:
cd ~/"My Code"
cd ~/'My Code'
此处未引用波浪号,因此仍会运行波浪号扩展。
cd "$HOME/My Code"
您可以在双引号字符串中展开环境变量;这基本上就是代字号扩展所做的事情
cd ~/My\ Code
您还可以使用反斜杠转义特殊字符(例如空格)。
答案 1 :(得分:34)
答案 2 :(得分:8)
cd ~/My\ Code
似乎对我有用...如果删除引号但保留斜线不起作用,你可以发布一些示例代码吗?
答案 3 :(得分:8)
您可以使用以下任何一项:
cd ~/"My Code"
cd ~/M"y Code"
cd ~/My" Code"
你不能使用:
cd ~"/My Code"
第一个可行,因为shell扩展〜/进入$ HOME /,然后在没有双引号的情况下在我的代码上添加。第二个失败是因为"
没有一个名为“~"
”(双引号)的用户要映射到。
答案 4 :(得分:4)
单个反斜杠对我有用:
ry4an@ry4an-mini:~$ mkdir "My Code"
ry4an@ry4an-mini:~$ vi todir.sh
ry4an@ry4an-mini:~$ . todir.sh
ry4an@ry4an-mini:My Code$ cat ../todir.sh
#!/bin/sh
cd ~/My\ Code
你确定问题不是你的shell脚本在子shell中改变目录,但是你完成后又回到主shell(和原始目录)中了吗?我通过使用避免了。在当前shell中运行脚本,尽管大多数人只会使用别名。这些空间可能是红鲱鱼。
答案 5 :(得分:3)
避免〜脚本;使用$ HOME代替。
答案 6 :(得分:3)
在努力解决同样的问题之后,我尝试了两种不同的解决方案:
""
)。最简单的方法是双引号变量,如前面的答案所示:
cd "$yourPathWithBlankSpace"
eval
。根据此回答Unix command to escape spaces,您可以删除空格,然后使用eval
,如下所示:
yourPathEscaped=$(printf %q "$yourPathWithBlankSpace")
eval cd $yourPathEscaped
答案 7 :(得分:3)
这可以做到:
cd ~/My\ Code
我不得不使用它来处理存储在iCloud Drive中的文件。您将不想使用双引号(“),因为它必须是绝对路径。换句话说,您不能将双引号与波浪号(〜)组合在一起。
通过示例,我不得不在最近的项目中使用它:
cd ~/Library/Mobile\ Documents/com~apple~CloudDocs/Documents/Documents\ -\ My\ iMac/Project
我希望能帮上忙。
答案 8 :(得分:2)
在Linux下工作时,下面的语法是正确的:
cd ~/My\ Code
但是,当您执行文件时,请使用以下语法:
$ . cdcode
(只是'。'而不是'./')
答案 9 :(得分:2)
使用双引号
go ()
{
cd "$*"
}
答案 10 :(得分:2)
这样做的简单方法是 -
$ cd My\ Folder
在bash中,运行DIR命令,在结果中你会看到它们之间有空格的文件夹或路径名已写入结果中 -
$dir
My\ Folder
New\ Folder
答案 11 :(得分:1)
我现在遇到类似的问题,因为我正在使用bash脚本来转储一些数据。我最终在脚本文件夹中创建了一个符号链接,其中没有任何空格。然后我将我的脚本指向了符号链接,并且工作正常。
创建链接。 ln -s [TARGET DIRECTORY OR FILE] ./ [SHORTCUT]
Mau或可能没用。
答案 12 :(得分:0)
使用单引号,例如:
myPath=~/'my dir'
cd $myPath