GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Cara Menghasilkan Prompt Ps1 Di Bash Atau Ksh93 Mirip Dengan Tcsh?

Di tcsh, saya memiliki default:

prompt  [%m:%c3] %n%# 

yang memberikan prompt seperti:

[woehler:hacking/c/hello] ajcarr% 

dan

[woehler:~] ajcarr% 

Dengan kata lain, direktori saat ini dan hingga dua berikutnya di atasnya di jalur.

Di ksh93 atau bash, penggantian $HOME oleh ~ mudah, seperti mengekstrak nama hanya direktori saat ini, tetapi saya belum menemukan cara untuk mereplikasi %c3 perilaku tcsh. Saat ini di ksh93 saya memiliki:

[[email protected]] hello $ 

dan

[[email protected]] ~ $ 

Adakah yang punya saran tentang cara melakukan ini?

Jawaban yang Diterima:

Dalam ksh93 :

PS1='${PWD#${PWD%?/*/*/*}?/} $ '
share/doc/libnl-3-dev $ _

PS1='[${HOSTNAME%%.*}:${PWD#${PWD%?/*/*/*}?/}] $USER% '
[host:share/doc/libnl-3-dev] user% _

Kalau mau ganti juga $HOME dengan ~ , diperlukan sesuatu yang lebih jahat:

PS1='$(d=${PWD/#$HOME/"~"};printf %s "${d#${d%?/*/*/*}?/}") $ '
~/w/maemo $ cd sb2-pathmaps
w/maemo/sb2-pathmaps $ _

PS1='$(d=${PWD/#$HOME/"~"};printf %s "[${HOSTNAME%%.*}:${d#${d%?/*/*/*}?/}]") $USER% '
[host:w/maemo/sb2-pathmaps] user% _

Semua ini juga harus bekerja di bash , meskipun bash memiliki prompt escape sendiri (mis. h untuk ${HOSTNAME%%.*} ) dan mekanisme pemendekan jalur (dengan PROMPT_DIRTRIM ).

Juga, varian yang lebih jahat akan sangat buruk, karena bash , tidak seperti ksh93 , akan fork() proses terpisah untuk setiap $(...; printf ...) substitusi perintah, meskipun hanya berisi bawaan. Ini juga berlaku untuk pdksh shell turunan, seperti mksh .

zsh memiliki prompt lolos sangat mirip tetapi tidak identik dengan tcsh :

zsh$ PS1='[%m:%3c] %n%# '
[host:share/doc/libnl-3-dev] user% _

Catatan:

$HOSTNAME variabel tidak disetel secara default di ksh93; alih-alih, Anda dapat menggunakan uname builtin (setelah mengaktifkannya dengan PATH=/opt/ast/bin:$PATH; /opt/ast/bin jalur tidak perlu ada):

PS1='$(d=${PWD/#$HOME/"~"};h=$(uname -n); printf %s "[${h%%.*}:${d#${d%?/*/*/*}?/}]") $USER% '

Berbeda dengan h melarikan diri di bash atau %m melarikan diri di zsh atau tcsh ini akan lacak perubahan nama host.


Linux
  1. Cara menggunakan perintah riwayat Bash

  2. Cara menulis loop di Bash

  3. Dinginkan prompt Bash Anda di Linux

  1. Bagaimana Cara Mempersingkat Bash Prompt di Linux?

  2. Bash Menimpa Baris Pertama, Ps1 Bash Prompt?

  3. Sorot Pemisah Jalur Di Ps1?

  1. Cara Menyesuaikan Warna Bash dan Konten di Prompt Terminal Linux

  2. Bagaimana Cara Men-debug Skrip Bash?

  3. Bagaimana cara menampilkan jalur saat ini di command prompt di linux sh (bukan bash)?