Mam dostęp użytkownika (bez roota) do komputera z systemem Linux (Suse), gdzie opracowałem kilka skryptów bash i odpowiadające im reguły autouzupełniania bash.
Ponieważ skrypty należą tylko do mojego użytkownika i dlatego potrzebuję kompletnych reguł tylko „aktywnych” dla mnie (część z faktu, że nie mam dostępu do zapisu roota), umieszczenie mojego skryptu bash_completion w /etc/bash_completion.d/
folderze nie jest opcją.
W tej chwili nazwałem mój plik .bash_completion.myscript
i pozyskuję go bezpośrednio z mojego .bashrc
, ale zastanawiam się tylko, czy istnieje jakiś inny „standardowy” sposób na osiągnięcie tych wyników, rozważany już w implementacji bash.
Na przykład tworzysz folder /home/myuser/.bash_completion.d/
?
źródło
.bash_completion
jest to plik, a nie katalog. Ponieważbash_completion.d
jest to katalog, który, jak zakładam, mógłbym po prostuscp
lokalniebash_completion.d
zmienić i zmienić jego nazwę na zdalnym serwerze, ale przy następnym logowaniu powiedział mi, że to musi być plik.Oto, w jaki sposób użytkownik lokalny może mieć
~/.bash_completion.d/
katalog roboczy .edytuj plik:
nano ~/.bash_completion
dodaj:utwórz katalog:
mkdir ~/.bash_completion.d
edytuj plik:
~/.bash_completion.d/myscript
dodaj:źródło .bash_completion:
. ~/.bash_completion
Aktualizacja
Jeśli spodziewasz się, że masz pusty
~/.bash_completion.d/
katalog i chcesz uniknąć wyświetlania komunikatu o błędziebash: /home/<username>/.bash_completion.d/*: No such file or directory
, dodaj test typu pliku za pomocą[ -f "$bcfile" ]
.źródło
Odpowiedź Russell E Glaue jest wielki, ale jego
~/.bash_completion
jest niekompletna.Problem polega na tym, kiedy
~/.bash_completion.d/
jest pusty, a następniefor f in ~/.bash_completion.d/*
drukuje następujący komunikat o błędzie:Najprostszym przenośnym rozwiązaniem jest pominięcie pętli, jeśli katalog jest pusty:
źródło
Prostszym rozwiązaniem jest użycie opcji nullglob. Chociaż nie jest to przenośne, nie są też uzupełnieniami bash. Przenośność nie ma więc znaczenia.
Podczas pozyskiwania będziesz także chciał używać cudzysłowów wokół zmiennej. To obsługuje przypadek, w którym w pliku znajdują się spacje innych znaków specjalnych.
źródło
nullglob
), Jest pomocne dla czytelnika.Przynajmniej bash-complete 2.8 i późniejsze włączają opcję umieszczania lokalnych uzupełnień Bash w katalogu
Nazwy plików ukończenia lub symboliczne nazwy dowiązań muszą być zgodne z odpowiednimi nazwami poleceń. Te uzupełnienia są ładowane tylko na żądanie. Uzupełnienia zapisane w pliku
~/.bash_completion
są zawsze ładowane.Odniesienie: patrz „P: Gdzie powinienem zainstalować własne lokalne uzupełnienia?” w https://github.com/scop/bash-completion/blob/master/README.md
źródło