【发布时间】:2011-04-15 08:40:15
【问题描述】:
我正在尝试创建一个转到特定目录的函数,如果指定了单个参数,则将其添加到目录字符串中。但无论我尝试什么,我都无法让它工作,并且 bash 总是报告 X 不是一个目录,即使我将它复制/粘贴到一个新的命令行,它也可以从那里工作。
function projects ()
{
DIR=
if [ -n "$1" ]
then
DIR=$1
fi
echo "~/Projects/Working Branches/$DIR" | sed 's/ /\\&/g' | xargs cd
}
-
$ projects Parametric\ Search\ API
/usr/bin/cd: line 4: cd: ~/Projects/Working Branches/Parametric Search API: No such file or directory
$ projects "Parametric Search API"
/usr/bin/cd: line 4: cd: ~/Projects/Working Branches/Parametric Search API: No such file or directory
我还尝试将 sed 正则表达式修改为 s/ /\\\\\\&/g,这会产生看似正确转义的字符串,但会导致完全相同的错误
$ projects Parametric\ Search\ API
/usr/bin/cd: line 4: cd: ~/Projects/Working\ Branches/Parametric\ Search\ API: No such file or directory
$ projects "Parametric Search API"
/usr/bin/cd: line 4: cd: ~/Projects/Working\ Branches/Parametric\ Search\ API: No such file or directory
最后我尝试用我能想到的每一种引号组合来包围$DIR,但到目前为止还没有运气。
【问题讨论】:
-
这属于stackoverflow。
-
您应该在脚本中使用
$HOME而不是~。你从哪里得到/usr/bin/cd?它不可能做任何有用的事情。 (嗯,也有例外。)您不需要转义目录中的空间。引号将占用空间。 -
@Dennis - 以
/usr/bin/cd开头的行是 bash 的输出,告诉我调用cd时出现错误 -
这就是我的意思。您尝试执行
xargs cd,但它不起作用,但您的系统上显然存在一个名为/usr/bin/cd的文件。xargs cd和/usr/bin/cd都不起作用。/usr/bin/cd(不管是什么)正在输出错误消息,这可能是一个 Bash 脚本,我不知道。
标签: bash cd sed function xargs