Bagaimana saya bisa mempersingkat prompt baris perintah (bash) saya?

167

Saat ini:

michael@Castle2012-Ubuntu-laptop01:~/Dropnot/webs/rails_v3/linker/spec/controllers$

Di luar mengganti nama mesin dan struktur direktori saya ...

Bagaimana saya bisa membuatnya menjadi lebih seperti:

michael:controllers$
Michael Durrant
sumber

Jawaban:

241

Untuk mengubahnya hanya untuk instance terminal saat ini

Cukup masukkan PS1='\u:\W\$ 'dan tekan enter.


Untuk mengubahnya "secara permanen"

Di Anda ~/.bashrc, temukan bagian berikut:

jika ["$ color_prompt" = ya]; kemudian
    PS1 = '$ {debian_chroot: + ($ debian_chroot)} \ [\ 033 [01; 32m \] \ u @ \ h \ [\ 033 [00m \]: \ [\ 033 [01; 34m \] \ w \ [\ 033 [00m \] \ $ '
lain
    PS1 = '$ {debian_chroot: + ($ debian_chroot)} \ u @ \ h: \ w \ $'
fi

Hapus @\h, dan ganti \wdengan huruf besar \W, sehingga menjadi:

jika ["$ color_prompt" = ya]; kemudian
    PS1 = '$ {debian_chroot: + ($ debian_chroot)} \ [\ 033 [01; 32m \] \ u \ [\ 033 [00m \]: \ [\ 033 [01; 34m \] \ W \ [\ 033 [00m \] \ $ '
lain
    PS1 = '$ {debian_chroot: + ($ debian_chroot)} \ u: \ W \ $'
fi

Simpan, keluar, tutup terminal dan mulai yang lain untuk melihat hasilnya.


Banyak lagi opsi!

  • Lihat di sini untuk howto yang lebih luas, dengan lebih banyak opsi
  • Lihat jawaban ini untuk menggunakan skrip Python kecil untuk mengatur prompt sehingga pemendekan hanya terjadi ketika Anda jauh di dalam struktur direktori.
ish
sumber
1
Anda juga dapat memiliki banyak informasi ... dan kemudian carriage return di bagian akhir seperti di unix.stackexchange.com/q/88780/10043
Michael Durrant
Apakah ada cara untuk menjadikan ini global? Dengan kata lain, jika saya sudo ke pengguna lain, apakah pengaturan ini terbawa, tetapi hanya untuk diri saya sendiri (yaitu, bukan untuk pengguna saat mereka biasanya menggunakan akun mereka)?
ctote
Untuk memiliki .bashrc bersama yang bekerja di Linux dan OSX, saya beralih ke unix.stackexchange.com/a/127800/10043
Michael Durrant
yaitu HOST='\033[02;36m\]\h' HOST=' '$HOST parse_git_branch () { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'; } TIME='\033[01;31m\]\t \033[01;32m\]' LOCATION=' \033[01;34m\]pwd | sed "s # (/ [^ /] \ {1, \} / [^ /] \ {1, \} / [^ /] \ {1, \} /). * (/ [^ /] \ { 1, \} / [^ /] \ {1, \}) / \ {0,1 \} # \ 1_ \ 2 # g "' BRANCH=' \033[00;33m\]$(parse_git_branch)\[\033[00m\]\n\$ ' PS1=$TIME$USER$HOST$LOCATION$BRANCH PS2='\[\033[01;36m\]>'
Michael Durrant
tetapi lihat jawaban untuk kode aktual yang digunakan.
Michael Durrant
104

Jalankan kode ini di terminal saat ini

PROMPT_DIRTRIM=3

Sekarang bash prompt hanya akan menampilkan 3 nama direktori terakhir. Anda dapat memilih 1 untuk hanya menampilkan direktori saat ini. Informasi lebih lanjut tersedia di dokumentasi GNU .

Efeknya:

/var/lib/apt/lists# PROMPT_DIRTRIM=3
/.../lib/apt/lists# 

Jika Anda ingin membuatnya secara permanen, tambahkan baris berikut ~/.bashrcdi awal:

PROMPT_DIRTRIM=3

atau nomor lain yang lebih besar dari nol.

santosh Mahto
sumber
7
Hanya sidenote: Ini membutuhkan Bash 4.
Stefan Lasiewski
Bagus ... Saya menambahkan bach_alias untuk ini (dengan fungsi) promptdir() { PROMPT_DIRTRIM=$1; }hanya untuk membuat hidup lebih mudah ...
dgoosens
18

Ini adalah pengaturan prompt yang saya sukai:

ditambahkan ~/.bashrc

PS1='[\u@\h \W]\$ '    

terlihat seperti ini:

[user@hostname dirname]$

(dengan spasi setelah $tanda)

tidak bisa dihancurkan
sumber
Bagaimana saya menambahkan spasi di antara setiap kata? Juga, bisakah saya mewarnainya?
Daniel Springer
6

Secara pribadi saya lebih suka melihat folder saat ini saja di bash prompt. Saya bisa melakukan ini dengan perintah berikut:

PS1='\W\$ '

Jika Anda ingin mulai berlaku setelah setiap mulai, tambahkan perintah di atas ke ~ / .bashrc Anda.

Rajeev Jayaswal
sumber
1

Saya menyadari ini super tua tetapi karena tidak ada yang menyarankan membuat alias saya pikir saya akan memposting. Menggunakan Bash Prompt Escape Sequences, saya membuat aliasshorten

Di ~/.bash_aliasessini Anda akan melihat $ Blue var untuk mengatur warna prompt yang dapat Anda hilangkan atau ubah berdasarkan preferensi. Saya juga menghapus terminal saat pemanggilan yang singkat.

alias c='clear'

alias shorten='PS1="$Blue$USER:\W$ "&& c'

Untuk mencapai string prompt yang diinginkan OP:

alias shorten='PS1="$USER:\W$ "'

Saya memiliki warna yang ditentukan dalam ~/.bashrcsalinan dan disisipkan dari https://wiki.archlinux.org/index.php/Color_Bash_Prompt . Di samping catatan ada apa dengan warna kode ansi? Saya bingung hanya melihatnya.

Blue='\e[0;34m'         # Blue
Allie Carver
sumber
Panduan langkah demi langkah untuk ini akan sangat berguna karena saya tidak tahu bagaimana menuju .bash_aliases. Terima kasih
Kayote
2
"." awalan menunjukkan direktori atau file tersembunyi. The tilde "~" adalah bentuk pendek dari variabel $ HOME. Jadi, "~ / .bash_aliases" hanyalah bentuk singkat dari "/home/$USER/.bash_aliases". Untuk membuka ".bash_aliases" Anda dapat membuka terminal dan mengetik "gedit /home/$USER/.bash_aliases" atau "gedit ~ / .bash_aliases" atau di direktori home Anda ketik ctrl-h untuk menampilkan file tersembunyi dan buka file secara langsung . Semoga itu bisa membantu. Anda mungkin ingin melakukan pencarian Google untuk alias yang berguna juga.
Allie Carver
0

Saya menulis sebuah fungsi yang dapat Anda modifikasi sesuai dengan kebutuhan Anda:

function termprompt() {
    PS1="${PS1//@\\h/}"     # Remove @host
    PS1="${PS1//\\w/\\W}"   # Change from full directory to last name
}

Tempatkan fungsi ini di atau dekat bagian bawah ~/.bashrcsetelah PS1garis telah sepenuhnya dihitung.

Anda akan mengetik termpromptsetiap kali Anda ingin mempersingkat prompt Anda atau, telah termpromptmemanggil dari bawah Anda ~/.bashrcuntuk keabadian.

Keuntungan dari teknik ini dibandingkan banyak jawaban lain adalah .bashrcdapat mengatur PS1dalam empat cara yang berbeda (xterm + no-color, xterm + color, no-xterm + no-color, no-xterm + color). Jawaban ini mendukung keempat metode saat ini dan mungkin metode yang akan datang juga.

Keuntungan lain adalah metode ini memiliki kode kontrol yang tidak terlalu rumit untuk dilalui untuk memasukkan perubahan Anda.

WinEunuuchs2Unix
sumber