在 bash 命令行中插入当前路径

Insert current path in bash command line

要在 bash 中运行程序,我通常使用相对路径,因为这样输入速度更快;例如,

me@host:~/dir/appX$  ./manage.py runserver

该命令随后将存储在历史记录中。要从历史记录中调用命令(CTRL+R 通常),我需要与运行它时的路径相同,以便调用功能用处不大。

一种解决方法是第一次插入完整路径,但是写的比较费时间

me@host:~/dir/appX$  /home/me/dir/appX/manage.py runserver

有没有办法(最好是内置的)在命令行中插入当前路径? 或者更好的解决方案(应该适用于 bash)?

您可以在 bash 中使用 Tilde Expansion 执行此操作。您需要两个波浪线扩展相关的功能,仅显示下面 man bash 中的相关部分:

Tilde Expansion
    If  the tilde-prefix is a `~+', the value of the shell variable PWD
    replaces the tilde-prefix.

tilde-expand (M-&)
    Perform tilde expansion on the current word.

正如它所说,您可以键入 ~+ 来获取当前路径。然后要展开它,您需要键入 M-&。所以按键序列 ~+M-& 就是您所需要的。

我发现按下所有这些键有点困难,所以我为此创建了一个键绑定。在您的 ~/.inputrc 文件中添加如下一行:

"\C-a":"~+\e&"

有了这个,我现在可以在键盘上键入 ctrl+a 以在命令行上获取当前路径。

PS:ctrl+a 可能已经绑定到其他内容(可能是行首),在这种情况下,使用另一个组合键可能会更好。使用 bind -p 检查当前绑定。