Portál AbcLinuxu, 10. května 2025 13:28

Dotaz: bash: PS1 s \w a / na konci adresáře

25.3.2010 10:08 Pev | skóre: 28
bash: PS1 s \w a / na konci adresáře
Přečteno: 183×
Odpovědět | Admin
Zdravím,

Chtěl bych, aby mi propt ukazoval / na konci adresáře (při použití \w) - tedy /etc/ místo /etc.

Pokud ale použijí PS1='\w/ \$ ', tak mi to v rootu (/) ukazuje //, místo /.

Jde v PS1 používat něco ve stylu if podmínek?

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

25.3.2010 10:28 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: bash: PS1 s \w a / na konci adresáře
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jde spustit bash skript a výsledek vypsat v promptu.
Máme skript /usr/bin/prompt:
  

  #!/bin/bash
  h=$(date +%H)
  if [ $h -le 3 ]; then
      echo "Ahoj"
  elif [ $h -le 7 ]; then
      echo "Dobre rano"
  elif [ $h -le 11 ]; then
      echo "Dobre dopoledne"
  elif [ $h -le 13 ]; then
      echo "Dobre poledne"
  elif [ $h -le 17 ]; then
      echo "Dobre odpoledne"
  elif [ $h -le 23 ]; then
      echo "Dobry vecer"
  else
      echo "Dobrou noc"
  fi
Nastavte skriptu příslušná práva a poté ho zaneste do proměnné PS1:
  $ export PS1="$(/usr/bin/prompt)> "
  Dobry vecer> 
Odkaz: Linux v příkazech - vylaďte si Bash!
Řešení 1× (Pev (tazatel))
25.3.2010 11:11 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: bash: PS1 s \w a / na konci adresáře
#!/bin/bash

h=$(pwd)
if [ $h != '/' ]; then echo -n "/"; fi
[petr@nt ~]$ export PS1='[\u@\h \w$(/home/petr/prompt)] '
[petr@nt ~/] cd /etc
[petr@nt /etc/] cd /home
[petr@nt /home/] cd /
[petr@nt /] 
Myslím že toto dělá přesně co chceš :-)
25.3.2010 11:47 Pev | skóre: 28
Rozbalit Rozbalit vše Re: bash: PS1 s \w a / na konci adresáře
Díky :-).

Raději bych sice, kdyby to šlo přímo (bez přítomnosti skriptu - když chybí, tak to zařve), ale i tak velká spokojenost :-).
h=$(pwd)
if [ $h != '/' ]; then echo -n "/"; fi
if [ "`pwd`" != '/' ]; then echo -n "/"; fi
25.3.2010 12:01 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: bash: PS1 s \w a / na konci adresáře
Pak by jsi musel tam kde nastavuješ proměnnou PS1 testovat zda skript existuje a když ne nastavit PS1 bez použití skriptu.

Nebo nastavit PS1 globálně pro celý PC a mět někde skript globální co bude testovat zda mají uživatelé vlastní a pokud ne použít globální atd......

Samozřejmě když něco blbě nastavíš tak to bude řvát vždy :-)
25.3.2010 12:04 Pev | skóre: 28
Rozbalit Rozbalit vše Re: bash: PS1 s \w a / na konci adresáře
Díky za odpověď :-).
Pak by jsi musel tam kde nastavuješ proměnnou PS1 testovat zda skript existuje a když ne nastavit PS1 bez použití skriptu.
Jasné, už blbnu - ptám se na úplné základy...

Mimochodem, v mém případě jde spíš o víc počítačů :-).
25.3.2010 13:14 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: bash: PS1 s \w a / na konci adresáře
Díky :-). Raději bych sice, kdyby to šlo přímo (bez přítomnosti skriptu - když chybí, tak to zařve), ale i tak velká spokojenost :-).
Tak ještě takto: PS1='[\u@\h \w$(if [ "`pwd`" != '/' ]; then echo -n "/"; fi)] '

ovšem co to udělá jak jako shell bude něco jiného jak bash netuším.
25.3.2010 12:09 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: bash: PS1 s \w a / na konci adresáře
Proč hned při každém promptu spouštět skript? Stačí ${PWD%/}/
25.3.2010 12:26 Pev | skóre: 28
Rozbalit Rozbalit vše Re: bash: PS1 s \w a / na konci adresáře
Tady je zas problém s tím, že v home adresáři pak není ~/ ale /home/login :-(.

Jinak dobrý :-).

Zkusím použít regexp bashe.
25.3.2010 13:28 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: bash: PS1 s \w a / na konci adresáře
No jo, pravda. Tak by to holt asi bez příkazu nešlo. Případně je tu ještě možnost opatchovat si bash. :-)
25.3.2010 13:10 deadmail
Rozbalit Rozbalit vše Re: bash: PS1 s \w a / na konci adresáře
Odpovědět | | Sbalit | Link | Blokovat | Admin
Skuste to cez PROMPT_COMMAND
PS1=""
PROMPT_COMMAND='echo -n "${USER} ${PWD/#$HOME/~}"; if [ "$PWD" != "/" ];then echo -n "/";fi;echo -ne " \$"'

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.