我在以下位置设置了一个变量.bashrc
:
export SOME_DIR=/path/to/some/dir
现在,ls
我可以输入ls $SOME_DIR[tab]
并且变量将被扩展,然后当深入文件系统时我可以使用制表符自动完成。但是,如果我尝试cd $SOME_DIR[tab]
或cd $SOME_DIR/[tab]
,什么也不会发生。
为什么这只适用于ls
?有可能让它与 一起工作吗cd
?
我尝试添加shopt -s direxpand
到.bashrc
, 没有效果:
答案1
显然shopt -s direxpand
可以与除内置cd
.所以我只是添加alias xy=cd
到我的个人资料中,并且工作方式与使用 TAB 的工作方式xy
相同。 (谁能想到事情会这么简单?)cd
direxpand
答案2
在 Cygwin 中,我遇到了同样的问题,必须将 shell 变量括在引号中。例如,cd $ccc
不会扩展,但cd "$ccc"
会扩展,并且您的光标仍在右侧引号之前。
答案3
也许您没有目录/path/to/some/dir/
?我刚刚尝试了cd $SOME_DIR/[tab]
我的系统并且它有效。
答案4
我在(旧)bash 4.2.37 中遇到了几乎相同的问题,而在 bash 4.3 或 4.4 中则没有。
也就是说:扩展适用于 ,ls
但不适用于cd
。
但是,作为辅助键绑定,我已经定义了(来自 eS潘):
Ctrl-s在我的
~/.inputrc
:
Control-s: shell-expand-line
这允许我输入:cd $SOME_DIR
然后Ctrl-s将变量扩展为:
cd /path/to/some/dir
同样有用的键绑定是(来自G吊球):
Ctrl-g也在我的
~/.inputrc
:
Control-g: glob-expand-word
这允许我输入ls b*
然后Ctrl-g得到b*
扩展:
$ ls b*<kbd>Ctrl</kbd>-<kbd>s</kbd>
$ ls bash.html_node.tar.gz bash.pdf
这还允许我编辑命令行并根据需要添加或删除元素。