给定命令的输出,我无法让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)
进行更改。
感谢您对此问题的任何解释或预先提供帮助。
答案 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/')"