perl 放置bash完成脚本的位置

6ju8rftf  于 2022-12-04  发布在  Perl
关注(0)|答案(3)|浏览(201)

我已经实现了一些Perl脚本,在某些情况下,我必须传递一些命令行参数到我的程序中。从可用性的Angular 来看,我已经决定添加一些bash completion script到我的项目中。但现在我卡住了,在哪里把我的脚本工作的预期。请让我知道我可以把我的bash completion script

自定义Perl脚本位置

C:\scripts\tool\bin\ktools.pl
也将bin path加入至系统变数。
我已将自动完成脚本放入
C:\scripts\tool\bin\etc\bash_completion.d\ktools\foo

Bash完成脚本

_foo() 
{
    local cur prev opts
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    opts="--help --verbose --version"

    if [[ ${cur} == -* ]] ; then
        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
        return 0
    fi
}
complete -F _foo ktools

当用户在命令行或git bash中输入ktools -- + press tab时,命令应该自动建议。

zysjyyx4

zysjyyx41#

我非常肯定您需要将其源代码导入到您的.bashrc中(基本上包括它)。
打开~/.bashrc并写入(如果它不存在,您可能需要创建它)

source your_bash_file

然后,在您的终端中,通过执行以下操作“刷新”

source ~/.bashrc

而且应该能成功。

5vf7fwbs

5vf7fwbs2#

上面的答案是非常不方便的,特别是如果你有多个完成脚本,并有其他人安装和使用您的程序。
更方便的方法是创建一个文件夹,在/etc或类似文件夹中包含所有完成脚本,然后在.bashrc源代码中包含该目录中的所有内容。

p8ekf7hl

p8ekf7hl3#

你是在Windows和你使用Bash,你应该告诉我们更多关于该设置之前,你得到次优建议。
下面是我在阅读了这个答案后,为Windows上的Git-Bash想到的:https://askubuntu.com/a/1188315/40581

将bash完成添加到Windows上的Git-Bash

您应该在安装bash-completion之后,将自订的完成字符加入$HOME/.local/share/bash-completion/completions。以下是您的操作方式:
1.从以下网址下载最新版本:https://github.com/scop/bash-completion/releases
1.打开git-bash并执行以下命令:

# Ensure the folder structure exists.
mkdir -pv "$HOME/.local/share/bash-completion/"

# Extract the downloaded file to the target directory.
# Adjust the path if you downloaded it to some other location.
tar -xvf "$HOME/Downloads/bash-completion-"[.0-9a-z]*".tar.xz" \
 -C "$HOME/.local/share/bash-completion/" \
 --strip-components=1 \
 --exclude=test

# Install the hook usually managed by pkg-config.
sed -e '{
  s|@PACKAGE@|bash-completion|g;
  s|@datadir@|$HOME\/.local\/share|g;
  }' \
  "$HOME/.local/share/bash-completion/bash_completion.sh.in" \
  > "$HOME/.local/share/bash-completion/bash_completion.sh"

# Setup .bashrc. You can change it to .bash_profile if you prefer that.
if [[ -e $HOME/.bashrc ]]; then
  echo '#!/bin/bash' > "$HOME/.bashrc"
fi

echo -e '\n. "$HOME/.local/share/bash-completion/bash_completion.sh"' \
  >> "$HOME/.bashrc"

现在您已经准备好了基本组件和文件夹,下次打开新shell时将读取您完成的内容。
我今天做了这个和一些额外的脚本来从go二进制文件(比如kubectl)中提取完成符,以保持它们的更新,并且还从Git-Bash中的包中提取了一些与.exe扩展名一起工作的完成符,但是我更喜欢在代码更容易维护的存储库中发布这些完成符。

相关问题