Bagaimana cara menampilkan path saat ini di command prompt di linux sh (bukan bash)?

43

Saya ingin menampilkan jalur saat ini di sh prompt (bukan bash shell), yang saat ini hanya menunjukkan "#", saya mencoba memperkenalkan ini

env PS1="$(whoami)@$(hostname):$(pwd)"

dan

set PS1="$(whoami)@$(hostname):$(pwd)"

di /etc/profile.

Namun yang jelas ini tidak menyegarkan ketika direktori diubah atau pengguna berubah. Tolong sarankan cara untuk membuat ini dinamis.

Bleamer
sumber
1
Perhatikan bahwa masing-masing $()menjalankan program terpisah; akan lebih cepat menggunakan variabel lingkungan, seperti $LOGNAME, $HOSTNAMEdan $PWDsebagai gantinya.
grawity
Satu jawaban adalah dengan menggunakan tanda kutip tunggal alih-alih tanda kutip ganda, namun, itu jawaban yang sepenuhnya benar. Yang benar-benar ingin Anda lakukan adalah menunda evaluasi kode di dalam prompt Anda hingga prompt tersebut digunakan.
MaasSql
Yang Anda butuhkan hanyalah menggunakan ekspor "PS1 =" $ (whoami) @ $ (hostname): $ (pwd)> "lalu edit / etc / profile dan tambahkan baris ini di akhir.
SDsolar

Jawaban:

76

Pergantian perintah dalam tanda kutip ganda "dapat diperluas segera. Bukan itu yang Anda inginkan untuk prompt Anda. Kutipan tunggal 'akan mempertahankan substitusi $PS1yang kemudian hanya diperluas ketika menampilkan prompt. Karenanya ini harus bekerja:

export PS1='$(whoami)@$(hostname):$(pwd)'

Jika Anda ingin tanda dolar yang biasa dan spasi di akhir prompt Anda, cukup tambahkan $di akhir (tidak perlu melarikan diri):export PS1='$(whoami)@$(hostname):$(pwd)$ '

mpy
sumber
1
Bekerja seperti pesona setelah mengubah 'atur' ke 'ekspor' di jawaban Anda, export PS1='$(whoami)@$(hostname):$(pwd)$'saya menyimpan perubahan s ke /etc/profile. Terima kasih.
Bleamer
@Bleamer: setbekerja untuk saya (tapi saya tidak punya penduduk asli sh). Tapi saya akan mengubahnya exportuntuk mematuhi pengaturan Anda.
mpy
2
Apakah ada cara untuk membuat ini permanen? Saat ini saya harus melakukannya setiap kali saya masuk. Terima kasih!
the.ufon
3
Anda telah meletakkan baris ini ke /etc/profile(lihat pertanyaan) atau ~/.profile?!
mpy
+1, ini akan membutuhkan pembatas pada akhirnya. Seperti, Anda mendapatkan sesuatu seperti foo@localhost:/home/fools -lasaat menggunakan ls -la.
phresnel
12
sh-4.2$ export PS1="\u@\h:\w>"
jenny@serenity:~>cd /usr/local
jenny@serenity:/usr/local>
Jenny D
sumber
1
Saya takut itu bekerja untuk bash shell bukan untuk sh, ketika saya melakukan ini saya mendapatkan \u@\h:\w>sebagai prompt perintah saya
Bleamer
1
Harus versi sh yang berbeda; seperti yang Anda lihat dari baris pertama, ini berhasil untuk saya di sh 4.2.
Jenny D
1
Mungkin itu masalahnya. Shell ini dari Busy Box. Terima kasih. Hargai bantuan Anda.
Bleamer
@Bleamer, ini bekerja untuk saya BusyBox v1.19.4 built-in shell (ash).
cjm
Terima kasih atas tanggapan @cjm, meskipun saya akan menghindari menggali lebih jauh ke dalam ini.
Bleamer
5

Perintah ini bekerja untuk saya.

export PS1="\u@\h: \W:$"

Di mana
\ u = nama pengguna
\ h = nama host
\ W Nama folder ini (bukan path lengkap)

rangsiman
sumber
+1 untuk \ W parameter
Dimitry K
3

Orang mungkin mempertimbangkan untuk mucikari prompt dengan menambahkan beberapa warna. Contohnya:

export PS1='\[\e[0;36m\]\u\[\e[0m\]@\[\e[0;33m\]\h\[\e[0m\]:\[\e[0;35m\]\w\[\e[0m\]\$ '
Jelas
sumber
1
Ini yang saya cari. Saya harap semua orang menyukai beberapa warna dalam hidup :)
Govind Kailas
Setidaknya begitu. ;)
Arvid
1

Satu jawaban adalah menggunakan tanda kutip tunggal dan bukan tanda kutip ganda, namun, itu bukan jawaban yang sepenuhnya benar. Yang benar-benar ingin Anda lakukan adalah menunda evaluasi kode di dalam prompt Anda hingga prompt tersebut digunakan.

set PS1="$(pwd)" 

set prompt ke direktori kerja pada set perintah.

set PS1="\$(pwd)" 

TIDAK mengembangkan $ (pwd). Sebagai gantinya, PS1 diatur ke nilai literal dari $ (pwd).

Uji / Pahami ini dengan menjalankan:

echo $PS1

. Jika Anda melihat string: $ pwd, prompt Anda berfungsi. Jika Anda melihat path literal, prompt rusak karena telah ditetapkan secara statis

MaasSql
sumber
1

Gunakan perintah di bawah ini untuk mengatur seperti di cpanel.

export PS1='$(whoami)@${HOSTNAME%%.*} [$ (pwd)] # '

Milan
sumber
Terima kasih! Tidak ada opsi lain di atas yang berfungsi. Yang ini. Membuatku gila. Terima kasih telah menyelamatkan kewarasan saya. HA!
Lee_Str