[英]bash auto complete binary file which is not in PATH
我正在嘗試在我的 CLI package 上制作自定義 bash 自動完成腳本。
當我像下面這樣安裝我的 package 時,我的命令安裝在 $PATH (/usr/local/bin) 中,
$ ./configure
$ make
$ sudo make install
所以我的 bash-autocomplete.sh 中的complete -o filenames -F _mycommand mycommand
bash-autocomplete.sh
可以正常工作。 (因為命令mycommand
在 $PATH (/usr/local/bin)
但是,當我在本地安裝 package 時,然后嘗試從安裝位置執行二進制文件,如下所示,
$ ./configure --prefix=$HOME/usr
$ make
$ make install
complete -o filenames -F _mycommand mycommand
不起作用,因為操作系統不知道mycommand
的位置。
$ ~/uftrace$ $HOME/usr/bin/mycommand [TAB]
Command 'command' not found,
我的問題是這樣的:
如何使用本地二進制文件制作 bash 完成功能? (不在 PATH 中)我可以通過修復Makefile
或configure
或bash-autocomplete.sh
來做到這一點嗎?
+
在本地安裝 package,而不是添加 PATH 不是一個選項,因為我想讓這個 bash 自動完成功能不管安裝位置。 我想在安裝點使用此功能。
從文檔中,除非使用“智能”完成加載器,否則這是不可能的:
首先,識別命令名稱。 [...] 如果命令詞是完整路徑名,則首先搜索完整路徑名的 compspec。 如果未找到完整路徑名的 compspec,則嘗試為最后一個 slash 后面的部分查找 compspec 。
我強調(或粗體)應該適用的部分: bash 將能夠完成完整路徑(例如: /usr/mycommand
甚至./mycommand
)但它無法解析mycommand
除非它是在PATH
中找到並完成一些技巧。
最后,您可以注冊一個完成加載器,例如查看命令(使用${1##*/}
獲取基本名稱):
_completion_loader() {
if [[ "${1}" == mycommand || "${1##*/}" == mycommand ]]; then
complete -o filenames -F _mycommand "$1"
return 124
fi
return 1 #
}
complete -D -F _completion_loader -o bashdefault -o default
我不會在 Linux 上這樣做,因為 bash-completion 已經開始並自行提供完成的機會:您可以檢查bash-completion因為他們可能有辦法處理您的完成,例如通過保存在/etc/bash_completion.d/<yourcommand>.bash
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.