BASH脚本将其转换为path名中带空格的目录
Argggg。 我一直在这个愚蠢的问题挣扎了好几天,我找不到答案。
我在Mac OS X上使用BASH,我想创build一个简单的可执行脚本文件,当它运行时会更改为另一个目录。 但是,该目录的path中有空格。 你怎么这样做? 这是我的…
文件名称: cdcode
文件内容: cd ~/My Code
现在被授予,这不是一个很长的path名,但是我的实际path名是五个深度目录,其中四个目录在path中有空格。
顺便说一句,我试过cd "~/My Code"
谈会cd "~/My Code"
和cd "~/My\ Code"
,这些都没有工作。
当你重复一个path时,你会停止代字符扩展。 所以有几种方法可以做到这一点:
cd ~/"My Code" cd ~/'My Code'
代字号不在这里引用,因此代字号扩展仍然会运行。
cd "$HOME/My Code"
您可以扩展双引号string中的环境variables; 这基本上是波浪扩展正在做的事情
cd ~/My\ Code
您也可以使用反斜杠转义特殊字符(如空格)。
嘿! 我在http://www.askdavetaylor.com/can_my_path_include_directory_names_with_spaces.html中看到了这一点;
x =“testing\我”
eval cd $ x
在双引号文本常量和“cd”之前的“eval”中的组合\使其工作就像一个魅力!
您可以使用以下任何一种:
cd ~/"My Code" cd ~/M"y Code" cd ~/My" Code"
你不能使用:
cd ~"/My Code"
第一个作品,因为shell展开〜/ $ HOME /,然后用不带双引号的“我的代码”。 第二个失败,因为没有用户称为"
”(双引号) ~"
映射到。
cd ~/My\ Code
似乎为我工作…如果删除引号,但保持斜杠不起作用,你可以发布一些示例代码?
一个反斜杠适用于我:
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中运行脚本,尽pipe大多数人只会使用别名。 空间可能是一个红色的鲱鱼。
在Linux下工作时,下面的语法是正确的:
cd ~/My\ Code
但是,当你执行你的文件时,使用下面的语法:
$ . cdcode
(只是“。”而不是“./”)
我有一个类似的问题,现在我正在使用bash脚本来转储一些数据。 我最终在脚本文件夹中创build了一个符号链接,其中没有任何空格。 然后,我指出我的脚本符号链接,这工作正常。
创build你的链接。 ln -s [目标目录或文件] ./[SHORTCUT]
莫或可能没有用。
使用双引号
go () { cd "$*" }
避免〜在脚本中; 改用$ HOME。
这样做的简单方法是 –
$ cd My\ Folder
在bash中,运行DIR命令,在结果中你会看到在它们之间有空格的文件夹或path名已经被写入结果中 –
$dir My\ Folder New\ Folder