Bagaimana cara menghindari tilde ~ di Bash prompt?

12

Saya ingin menghapus tilde dari menampilkan dalam variabel PS1.

String PS1 saya saat ini:

PS1="\h:\w\n$"

Dan prompt terlihat seperti ini:

lnx-hladky:/tmp/plugtmp
$

Saya tidak suka direktori $ HOME ditampilkan sebagai tilde. Bisakah ini dihindari?

Ini menyebabkan masalah, misalnya:

lnx-hladky:~/DOC
$  

Dokumentasi mengatakan:

\w : the current working directory, with $HOME abbreviated with a tilde 
\W: the basename of the current working directory, with $HOME abbreviated with a tilde

Apakah ada kemungkinan untuk menghindari $ HOME disingkat dengan tilde?

Saya telah menemukan satu jalan keluar tetapi saya merasa ini terlalu rumit:

PROMPT_COMMAND='echo -ne "\e[4;35m$(date +%T)\e[24m$(whoami)@$(hostname):$(pwd)\e[m\n"'
PS1=$

Adakah yang bisa mengusulkan solusi yang lebih baik? Saya merasa tidak cukup baik menjalankan begitu banyak perintah hanya untuk mendapatkan prompt. (tanggal, whoami, nama host, pwd).

Jirka
sumber
"masalah" apa yang disebabkan oleh tilde dalam contoh?
JBallin

Jawaban:

11

bash menjalankan ekspansi di prompt; pastikan untuk melarikan diri dari mereka.

PS1='\h:$(pwd)\n$'
Ignacio Vazquez-Abrams
sumber
Itu menjawab pertanyaan saya. Saya tidak tahu ada kemungkinan seperti itu. Terima kasih banyak, Ignacio!
Jirka
2
@ Janka: Anda juga dapat menggunakan: `PS1 = '\ h: $ PWD \ n $'.
Dijeda sampai pemberitahuan lebih lanjut.
1
Solusi Jirka dijalankan pwdpada setiap prompt. Solusi Dennis tidak, hanya mengambil PWD variabel lingkungan, yang jauh lebih murah.
Stéphane Gourichon
2
pwdadalah bash builtin. Pernyataan yang ${PWD}"jauh lebih murah" daripada $(pwd)tanpa bukti.
Vineet
1
@anxieux: Anda harus mengutip dengan tanda kutip tunggal, bukan tanda kutip ganda
weberjn
0

Anda tidak perlu menjalankan banyak perintah seperti yang Anda tunjukkan dalam contoh Anda. bashmenyediakan jalan pintas untuk sebagian besar hal yang Anda sebutkan.

Contoh Anda:

PROMPT_COMMAND='echo -ne "\e[4;35m$(date +%T)\e[24m$(whoami)@$(hostname):$(pwd)\e[m\n"'
PS1=$

dapat ditulis ulang sebagai:

PS1='\e[4;35m\t\e[24m\u@\h:\w\e[m\n'

Di mana \tmenunjukkan waktu (dalam format 24 jam), \umenunjukkan nama pengguna saat ini, '\ h' menunjukkan nama host - bashhalaman manual membahas ini dan sisa pelarian yang tersedia untuk prompt Anda.

Bahkan jika Anda memperluas ~ke jalur penuh, jika Anda tidak tahu pengguna mana yang menjalankan perintah dan Anda berpindah pengguna secara teratur, Anda dapat membuat masalah dengan izin file atau izin yang dapat dieksekusi.

Doug Harris
sumber
Hai, maksud saya adalah mengganti \ w dengan path lengkap termasuk path FULL $ HOME. Terima kasih kepada Ignacio saya sekarang menggunakan PS1 = '\ e [4; 35m \ t \ e [24m \ u @ \ h: $ (pwd) \ e [m \ n $' yang telah memecahkan masalah saya :-)
Jirka
Sempurna - Saya suka termasuk \usehingga saya tahu siapa saya. Jangan lupa untuk menerima jawaban Ignacio - klik kotak centang di sebelah kiri pertanyaan.
Doug Harris
Terima kasih atas petunjuknya. Saya baru di forum ini. Itu tempat yang bagus.
Jirka
\ u @ \ h: $ PWD (perhatikan titik dua) dapat digunakan sebagai input untuk scp
weberjn
0

Saya menggunakan pengaturan di bawah ini dalam file .bash_profile saya

$ export PS1='\e[1;34m\D{%T %d.%m.%Y} \[\033[00;39m\]\u\[\033[00;32m\]@$IP:\[\033[00;33m\]$(pwd)/\n\\$\[\033[00m\] '

21:40:08 14.12.2017 vmware@10.112.202.228:/home/vmware/Downloads/
Mohammad Shahid Siddiqui
sumber