从命令结果更改目录

时间:2019-04-07 21:50:47

标签: bash echo cd

给定命令的输出,我无法让cd来更改目录。

例如,以下操作无效:

# should be equivalent to "cd ~"
cd $(echo "~")
# should be equivalent to "cd ~/go"
cd $(echo "~/go")

两者都返回错误,例如

cd: no such file or directory: ~
cd: no such file or directory: ~/go

但是,我可以指定绝对路径,例如

cd $(echo "/Users/olly")

将成功将目录更改到该位置。更重要的是,如果我省略引号,它将起作用。

cd $(echo ~)

目前,我有一个程序jump-config,它将打印到终端的路径字符串。

jump-config
// prints ~/go/src/gitlab.com/ollybritton/jump/jump-config

我正在尝试做

cd $(jump-config)

但是我得到了错误

cd: no such file or directory: ~/go/src/gitlab.com/ollybritton/jump/jump-config

我很乐意做cd $JUMP_CONFIG,但是程序的输出不是固定的,我需要cd $(jump-config)进行更改。

感谢您对此问题的任何解释或预先提供帮助。

1 个答案:

答案 0 :(得分:1)

波浪号扩展不能用引号引起来,通常应在脚本编写中避免。仅用于交互式使用。从man bash/ *Tilde Expansion

       如果单词以未加引号的波浪号字符('〜')开头,则所有在第一个未加引号的斜杠之前的字符(或所有字符,如果没有)        不带引号的斜杠)被视为波浪号前缀。如果没有任何字符        波浪号前缀用引号引起来,波浪号前缀中的字符        代字号被视为可能的登录名。如果此登录名为空        字符串,将波浪号替换为shell参数HOME的值。如果        未设置HOME,而是替换执行Shell的用户的主目录。否则,将波浪号前缀替换为与指定登录名关联的主目录。

是否可以修改jump-config来代替$HOME输出~?如果没有,您可以尝试以下选项之一:

jump_config=$(jump-config); cd "${jump_config//\~/$HOME}"

cd "$(jump-config |sed 's/~/$HOME/')"