Portál AbcLinuxu, 7. května 2025 07:32
set_bash_prompt() {
fs_mode=$(mount | sed -n -e "s/^\/dev\/.* on \/ .*(\(r[w|o]\).*/\1/p")
if [ "$fs_mode" == 'ro' ]; then
PS1='\u@\h\[\033[01;31m\]${fs_mode:+($fs_mode)}\[\033[00m\]:\w\$ '
# elif [ "$fs_mode" == 'rw' ]; then
# PS1='\u@\h\[\033[01;32m\]${fs_mode:+($fs_mode)}\[\033[00m\]:\w\$ '
fi
}
PROMPT_COMMAND=set_bash_prompt
Má to ale jeden háček, nereflektuje to změnu adresáře.
Např. když jsem na rw a udělám cd /boot (oddíl, který je ro), tak stále ukazuje rw.
Háček je v tom zjišťování fs_mode, kde parsuje jen z root FS (/).
Potřeboval bych nějak docílit, aby byl reflektován vždy aktuální adresář, tj. z něho zjištěn oddíl (správný řádek z mount).
Tedy nějaký příkaz, jehož vstupem bude cesta a výstupem mountpoint, který mi pak poslouží při výběru správného řádku z mount (a zjištění ro/rw).
Snad jsem to popsal srozumitelně.
Děkuji za nápady.
Řešení dotazu:
mount | sed ...zkus dát
ls -ld .|cut -c 2,3Aktuální oddíl se dá zjistit příkazem
df .Oříznutý výsledek můžeš použít jako filtr do svého sedu.
if awk -v mountpoint=$(df --output=target --no-sync . | tail -1) '$2 == mountpoint { exit $4 ~ "^ro(,|$)"; }' /proc/mounts then echo rw else echo ro fi
mountpoint=$(df --output=target --no-sync . | tail -1)
Ale awk moc neumím. :( pak passneš tu variable mountpoint do awku, ale pak mi už moc není jasné co s čím porovnáváš.
Dalo by se případně udělat, aby byl výstup ro/rw jako v tom původním případě? I když je to asi jedno.
Zatím mi to ale nechce fungovat.
if awk -v mountpoint=$(df --output=target --no-sync . | tail -1) '$2 == mountpoint { exit $4 ~ "^ro(,|$)"; }' /proc/mounts then FSPERM="[\033[01;32m\](rw)\[\033[00m\]" else FSPERM="[\033[01;31m\](ro)\[\033[00m\]" fi PS1='\u@\h\$FSPERM:\w\$ 'Ať to zkouším jakkoli, tímto stylem se nebarví, ale vypisuje se obsah FSPERM. Zkoušel jsem třeba ${FSPERM}, PS1 dát do "..", naopak FSPERM do ' ' a různé kombinace. Lze to takto udělat nebo musím celé ty PS1 i s barvou dát do každé části podmínky? Děkuji.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.