【问题标题】:Assign directory to variable in a source file将目录分配给源文件中的变量
【发布时间】:2014-09-08 18:05:04
【问题描述】:

我正在构建一个源文件,其中包含一些可执行文件的别名(这些文件工作得很好)并将目录分配给变量,以便更快地进入目录,减少输入。例如,如果我获取 example.source:

#!/usr/bin/bash
mydir="/path/to/some/dir"

我可以通过

联系/path/to/some/dir
cd $mydir

但是,我无法像键入完整路径那样使用制表符完成浏览其他子目录。我的意思是,如果我使用 tab 键来完成变量,我会得到 cd $mydir 而不是 cd $mydir/(我必须删除最后一个空格字符并手动输入斜杠 / 才能看到下一个子目录)。希望这是一个可以理解的问题。有什么解决方法吗?

编辑:我使用的 linux 发行版是 Slackware Linux 3.2.31.c x86_64 GenuineIntel GNU/Linux

EDIT2: GNU bash,版本 4.2.37(2)-release

【问题讨论】:

  • 我不知道有什么方法可以让制表符完成以知道您希望它这样做,但您可以将尾部斜杠粘贴在变量中并使用 cd ${myd<tab> 这将完成到 @987654327 @ 然后您至少可以跳过需要键入斜杠。 (虽然这里的 cd 没有为我完成变量名,所以我不知道发生了什么。)
  • 好的,谢谢,我可以对系统中的变量进行制表符补全(Linux 3.2.31.c x86_64,Slackware)
  • 哦,我可以制表完整变量,只是不能使用cd
  • 发布complete -p cd的输出。
  • 编写一个使用completecompgen(等)的shell函数并将其设置为cdcomplete处理程序(使用适当的顶级选项来控制空格等.)。它几乎看起来好像默认的完整选项可以做你想要的,但至少在这里 (bash 3.2.25) 他们没有按照你想要的方式一起工作。您可以尝试使用-o nospace-o dirnames-o plusdirs 和/或-o bashdefault 以及-A variable/-v 作为complete ... cd 的参数,看看是否可以让它工作。

标签: linux bash variables directory tab-completion


【解决方案1】:

显然此功能已开始在 bash 4.3 中实现,发布时间为 2014 年 2 月 26 日 09:25。

在 bash 4.3 中阅读 NEWS 文件我发现了这个:

我。单词完成代码检查文件名是否 包含一个 shell 变量扩展为目录名并在单词后面附加 `/' 作为适当的。相同的代码扩展命令名称中的 shell 变量 执行命令完成时。

不幸的是,我无法从头安装 bash(因为我正在使用服务器),但我希望这可以帮助其他人。

【讨论】:

    【解决方案2】:

    如果我理解您的问题,那么我相信可以通过将其放在example.source 的顶部来解决。这将在您每次 cd 时列出您的内容。

        #!/usr/bin/bash
    
        # Make cd change directories and then list the contents
        function cd() {
            builtin cd $*;
            ls;
        }
    
        mydir="/path/to/some/dir"
        cd $mydir
    

    我的另一个建议是尝试将 cd 放在您的别名中。像这样的:

        mydir="cd /path/to/some/dir"
        $mydir
    

    【讨论】:

    • 我不相信其中任何一个都接近于回答这个问题。他希望能够通过制表符完成变量名称,然后继续制表符完成该目录内的路径。
    猜你喜欢
    • 2013-11-25
    • 2012-08-04
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 2012-11-11
    • 2015-04-27
    • 1970-01-01
    • 2016-02-16
    相关资源
    最近更新 更多