GNU/Linux >> Znalost Linux >  >> Linux

Proč nefunguje automatické dokončování při zadávání názvu příkazu za „zdroj“?

source hledá PATH ve výchozím nastavení.

Ale v bash nefunguje automatické dokončování při zadávání názvu příkazu za source .

Obecně platí, že kdy probíhá automatické dokončování založené na PATH funguje a kdy ne?

Jak mohu zajistit, aby to fungovalo při psaní argumentu do source ?

Děkuji.

Přijatá odpověď:

source (bash vestavěný příkaz) přebírá název souboru argument; hledání PATH se spustí pouze v případě, že zadaný název souboru není nalezen. Takže source foo pokusí se nejprve otevřít ./foo a teprve když to selže, začne hledat /path/dir/foo . Zkuste tab-completing s názvy souborů, které existují ve vašem aktuálním adresáři, nebo poskytněte cesty k příkazu, který vás zajímá. Ty by měly tab-complete podle očekávání.

  • Nejjednodušší způsob, jak dosáhnout toho, co chcete, je rozpoznat, že se dokončování tabulátoru pokouší o complete-filename ale chcete kompletní příkaz . Můžete spustit kompletní příkaz pomocí M-! klávesová zkratka aka Alt+! . (Viz READLINE sekce, Completing podsekci v man bash a v online dokumentaci bash pro další dokončovací funkce a výchozí klávesové zkratky.)

  • Obtížným způsobem by bylo revidovat výchozí dokončovací funkce spouštěné pro source je prvním argumentem pro volání obou název kompletního souboru a kompletní příkaz funkcí. Viz help complete (na vašem příkazovém řádku), Programmable Completion podsekce v man bash a v online dokumentaci bash a complete vestavěný příkaz.

Obecně platí, že dokončování tabulátorem je poziční a volá různé funkce dokončování podle toho, kde se v příkazovém řádku nacházíte. Na systémech Arch mohou balíčky nainstalovat soubor dokončení do /usr/share/bash-completion poskytovat kontextově orientovaná dokončení pro jejich spustitelné soubory.


Linux
  1. Pipelined Sed nefunguje při nalezeném názvu souboru uvnitř Bash nahrazení příkazu při vyvolání z Find „-exec“?

  2. Proč dlouhé zpoždění poté, co příkaz nebyl nalezen?

  3. Proč „zip“ v A For Loop funguje, když soubor existuje, ale ne, když neexistuje?

  1. Proč nefunguje find -exec mv {} ./target/ +?

  2. Bash:Proč se nadřazený skript neukončí na SIGINT, když podřízený skript zachytí SIGINT?

  3. Při instalaci Rust toolchain do Dockeru nefunguje příkaz Bash `source`

  1. Proč regulární výraz funguje v X, ale ne v Y?

  2. Proč substituce procesu Bash nefunguje s některými příkazy?

  3. Shoda vzoru nefunguje ve skriptu bash