背景
这个问题是关于在bash脚本或别名中使用cd命令。
此处有一个相关的SO问题:Why doesn't "cd" work in a bash shell script?
问题:
假设您有一个名为“foopath”的bash程序,它在传入参数时将目录路径发送到stdout,例如
$> /usr/bin/foopath 1998 ## returns /some/long/path/here/1998
$> /usr/bin/foopath 80817 ## returns /totally/different/path/80817/files
foopath程序只进行查找并根据用户传入的参数返回它可以找到的最接近的匹配路径。
问题:
1)如何在.bash_profile中构造函数和别名,以便用户可以:
foo 1998
或foo 80817
(foopath命令缩短目标)cd foo 1998
或cd foo 80817
更改目录(更改目录目标)陷阱
由于上述1c的目标,这个看似简单的任务证明是繁琐的。换句话说,函数/别名应该可以交互使用,正如Why doesn't "cd" work in a bash shell script?中相关SO帖子中的示例所示。
答案 0 :(得分:1)
1a)的
foo () {
cd "$(foopath $1)"
}
1b)的
cd () {
case $1 in
(foo) builtin cd "$(foopath $2)";;
(*) builtin cd "$@";;
esac
}
1c)1a)和1b)都可以交互使用。
答案 1 :(得分:1)
解决方案可能是
通过使脚本成为函数
function script()
{
cd "$(foopath "$*")"
}
改为使用source script.sh
(或. script.sh
),因此脚本在调用shell中运行