Skrýt aktuální pracovní adresář v terminálu

112

Ve výchozím nastavení se zobrazí výzva terminálu:

user@system:/folder1/folder2/folder3/folder4$

čím hlouběji přejdete do souborového systému, tím méně prostoru ponecháte pro psaní příkazů. Mohu toto změnit, aby se zobrazilo pouze něco jako:

>

Chci říct, že mohu jen napsatpwd, abych ukázal, kde jsem. ;)

    
dané Theodor 09.12.2010 10:16

5 odpovědí

131
export PS1='\u@\h: '

Výsledkem jeoli@bert: pro výzvu.

Pokud opravdu chcete něco tak minimalistického, jaký požadujete, zkuste to:

export PS1='> '

Na konec vašeho souboru~/.bashrc můžete připojit tento soubor, aby byl mezi přihlašovacími údaji přetrváván.

Můžete také získat kreativitu s některými barvami. Zde je to, co používám na svých serverech:

export PS1='\[3[0;35m\]\h\[3[0;33m\] \w\[3[00m\]: '

Dát (je snadnější vidět na plném černém pozadí):

Slovníček přijatelných znaků v PS1

    
odpověděl Oli 09.12.2010 10:22
87

Stačí rozšířit odpověď Oli (a proto mám záložku pro tyto symboly na krátkou ruku):

Výzva bash (stefano@linux:~$) je pouze první z několika výzev může se zobrazit:

  • PS1 : výchozí výzva, kterou vidíte při otevření shellu

    Hodnota je uložena v proměnné prostředí nazývanéPS1. Chcete-li vidět jeho hodnotu, typ

    echo $PS1

    To vám dá něco jako

    \[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w$
    

    Chcete-li jej změnit, můžete proměnnou nastavit novou hodnotu:

    export PS1="\u > "
    

    Výsledkem bude výzva takto:

    stefano > 
    
  • PS2 : je vaše sekundární výzva. Toto se zobrazí, když příkaz není dokončen. Zadejte příkazecho "asd a stiskněte enter, sekundární výzva vám umožní zadat další řádky, dokud neuzavřete zavřené čárky.

  • PS3 je výzva použitá pro select (2)

  • PS4 je výzva stopy (výchozí:+)

Chcete-li provést změny trvalé, připojíte je na konec.bash_profile (nebo.bashrc, viz tato otázka ) ve vašem domovský adresář.

Zde je více či méně úplný seznam zkratky, který můžete použít při psaní těchto:

  • \a znak "zvonku"
  • \A 24h čas
  • \d datum (např. út 21. prosince)
  • \e znak "escape"
  • \h Jméno hostitele (až první ".")
  • \H Hostname
  • \j Počet aktuálně spuštěných úloh (ps)
  • \l Aktuální tty
  • \n Linkový kanál
  • \t Čas (hh: mm: ss)
  • \T Čas (hh: mm: ss, formát 12h)
  • \r Vrácení vozu
  • \s Shell (tj. bash, zsh, ksh ..)
  • \u Uživatelské jméno
  • \v verze Bash
  • \V řetězec uvolnění Full Bash
  • \w Aktuální pracovní adresář
  • \W Poslední část aktuálního pracovního adresáře
  • \! Aktuální index v historii
  • \# Příkazový řádek
  • $ "#" Pokud jste root, jinak "$"
  • \ Literal Backslash
  • \@ Čas (12h formát s am / pm)

Samozřejmě můžete vložit jakýkoli doslovný řetězec a libovolný příkaz:

export PS1="\u $(pwd) > "

Kde$(pwd) stojí místo "výstupu" pwd.

  • Při výmazu příkazu, jako v$(pwd), je vyhodnocen pokaždé, když je výzva zobrazena, jinak, jako v$(pwd), vyhodnocuje se pouze jednou při spuštění bash.

Pokud chcete, aby vaše výzva obsahovala barvy, můžete k jejímu použití použít barevné kódy bash. Kód se skládá ze tří částí:

40;33;01
  • První část před středníkem představuje styl textu.

    • 00 = žádný
    • 01 = tučné písmo
    • 04 = podtržítko
    • 05 = blikat
    • 07 = zpět
    • 08 = skryté
  • Druhá a třetí část jsou barva a barva pozadí:

    • 30 = černá
    • 31 = červená
    • 32 = zelená
    • 33 = žlutá
    • 34 = modrá
    • 35 = purpurová
    • 36 = azurová
    • 37 = bílá

Každá část může být vynechána za předpokladu, že začíná vlevo. tj. "1" znamená tučné, "1; 31" znamená tučné a červené. A vy byste dostali váš terminál k tisku v barvě uniknutím příkazu[ a jeho ukončením pomocím. 33 nebo 1B v šestnáctkové soustavě je znak ASCII "ESCAPE" (zvláštní znak v znakové sadě ASCII). Příklad:

"[1;31mHello World[m"

Vytiskne "Hello World" v jasně červené barvě.

    
odpověděl Stefano Palazzo 21.12.2010 22:57
6

Další alternativou je zkrátit cestu k pracovnímu adresáři, když je příliš dlouhá: ořízněte pracovní adresář příkazového řádku

  

Vytvořte malý pythonový skript, který implementuje požadovanou logiku ořezávání.

     

Příklad: ~ / short.pwd.py

import os
from commands import getoutput
from socket import gethostname
hostname = gethostname()
username = os.environ['USER']
pwd = os.getcwd()
homedir = os.path.expanduser('~')
pwd = pwd.replace(homedir, '~', 1)
if len(pwd) > 30:
    pwd = pwd[:10]+'...'+pwd[-20:] # first 10 chars+last 20 chars
print '[%s@%s:%s] ' % (username, hostname, pwd)
     

Teď ji vyzkoušejte z terminálu:

export PROMPT_COMMAND='PS1="$(python ~/.short.pwd.py)"'
     

Pokud jste v pořádku s výsledkem, přidejte příkaz do ~ / .bashrc

    
odpověděl Olivier Lalonde 22.12.2010 01:26
4

Chci to často provést dočasně. Zde je to, co dělám:

$ export OLD_PS1=$PS1                    # save Long Prompt to OLD_PS1
$ export PS1="\u > "export PS1="\u $ "   # change to PS1 to Short Prompt
$ export PS1=$OLD_PS1                    # restore Long Prompt to PS1

Doufám, že to někomu pomůže.

    
odpověděl Joe Codeswell user601770 27.03.2013 23:33
0

Věc, která mi pomohla, byla: export PS1 = '$'

Abyste to měli při každém otevření terminálu, napište příkaz na konec .bashrc, který můžete otevřít pomocí 'cd' a poté 'gedit .bashrc'.

Doufám, že to pomůže. Pracoval pro mě.

    
odpověděl Arka Mitra 05.07.2018 21:36