GNU/Linux >> Znalost Linux >  >> Linux

Jak získat přístup k poslednímu argumentu komentovaného příkazu?

Nacházím . (alt . pro mnoho dalších) být velmi užitečný při práci v terminálu, vložení posledního argumentu z posledního řádku na aktuální výzvu. Nefunguje však, když byl poslední řádek okomentován (za předpokladu set -o interactivecomments ).

Nenapadá mě přesný případ použití, ale několikrát se stalo, že jsem okomentoval příkaz, o kterém jsem si před provedením uvědomil, že není to, co jsem v tu chvíli potřeboval, a pak jsem chtěl jeho poslední argument v následující příkaz.

Uvědomuji si, že ignorování všeho komentovaného má svou logiku, protože to není nikdy interpretováno a tudíž nic z toho není tokenizováno do argumentů, ale existuje vůbec nějaký způsob, jak dělat to, co chci?

Nebylo by ideální – ale bylo by použitelné – kdybych musel použít jiný stisk klávesy vázaný na alternativní příkaz, který by dělal to, co chci.

Používám Zsh, ale řešení Bash by mohlo fungovat nebo se blížit tomu, co bych potřeboval udělat v Zsh.

Přijatá odpověď:

Příkaz nekomentujte.

Místo toho vložte : vpředu spíše než # . Tím se váš příkaz stane argumentem pro nulový nástroj : , který při spuštění nic nedělá. Argumenty jsou tokenizovány a analyzovány, protože je to stále příkaz, ale nic jiného se s nimi nedělá.

Existují případy, kdy to není vhodné:zejména při zjišťování samotného příkazu má vedlejší účinky. Jednoduchým příkladem je substituce příkazů:

$ : log $(find -print -delete) --target /var/run/cache

V tomto případě příkaz uvnitř $(...) bude spuštěn a nahrazen do argumentů : , i když původní příkaz samotný by se nikdy nespustil. Méně destruktivní případ by byl ${foo:=default} rozšíření parametru, které má vedlejší účinek v přiřazení hodnoty $foo .

Nakonec budou stále probíhat přesměrování nebo potrubí:

$ : foo > outfile
$ : bar | grep x | ...

v obou případech odešle prázdný výstup do cíle, který zkrátí nebo vytvoří soubor nebo spustí následující příkazy, kterým se nemusí líbit prázdný vstup, který dostanou.

Pokud nemáte žádné z těchto zvláštních obav o svůj příkaz, je to zcela bezpečné a funguje v zsh, Bash a jakémkoli shellu kompatibilním s POSIX (ačkoli následné chování alt-. nebude fungovat všude).

Pokud je to konkrétně poslední slovo, které chcete, zsh poskytuje přizpůsobitelné klávesové zkratky a příkazy, které můžete použít k manipulaci s příkazovým řádkem. Pokud bindkey '^K' kill-region pak se můžete vrátit zpět před slovo, CtrlK pro vymazání na začátek řádku, : a pak mít bezpečný příkaz s jediným slovem, které vás zajímá.

Související:Debian – Jak nainstalovat některé balíčky z „nestabilního“ Debianu na počítač se „stabilním“ Debianem?
Linux
  1. Jak si mohu vybavit argument předchozího příkazu bash?

  2. Jak získat přístup k Unix Domain Sockets z příkazového řádku?

  3. Jak vytisknout poslední řádek komprimovaného souboru gz na příkazovém řádku?

  1. Jak používat Linuxový příkaz grep

  2. Jak používat příkaz historie v Linuxu

  3. Jak funguje příkaz oc debug v OpenShift

  1. Jak používat příkaz basename?

  2. $_ vs! $. Poslední argument předchozího příkazu a přesměrování výstupu?

  3. Jak funguje Tee Command?