Saya menggunakan CentOS 6.4. Secara default, prompt pengguna root memiliki #
simbol, yaitu tampilannya mirip [root@myserver ~]#
.
echo $PS1
mencetak [\u@\h \W]\$
; tapi jika saya lakukan PS1="[\u@\h \W]\$"
(yang seharusnya tidak mengubah apa pun, AFAICS), saya berakhir dengan prompt yang terlihat seperti ini: [root@myserver ~]$
.
Mengapa ketika saya mencoba mengaturnya sendiri (saya akhirnya ingin mengubahnya menjadi sesuatu yang lebih berguna), apakah itu menafsirkan $
secara harfiah? Hampir setiap halaman saya dapat menemukan (misalnya, Cara: Ubah / Setup bash custom prompt (PS1) ) mengatakan bahwa \$
harus menghasilkan #
untuk pengguna root.
PS1=[\u@\h \W]\$
kembali-bash: W]$: command not found
.PS1="[\u@\h \W]\$"
.Jawaban:
Dalam pertanyaan Anda, Anda menyiratkan bahwa Anda sama sekali tidak mengutip kalimat itu; itu jelas salah, karena dengan begitu ruang akan memisahkan tugas argumen "PS1 = [\ u @ \ h" dari perintah "\ W] \ $". Harap sadari bahwa setiap karakter adalah penting.
Ngomong-ngomong, apa yang mungkin Anda lakukan adalah menggunakan tanda kutip ganda (") daripada tanda kutip tunggal ('). Mereka berperilaku sangat berbeda ketika datang ke shell menafsirkan apa yang Anda ketikkan. Dengan tanda kutip ganda, itu akan mencoba melakukan hal-hal pintar dengan urutan backslash / some-character. Untuk tugas ini, karena tidak ada yang istimewa tentang \ u, \ h, dan \ W, mereka tidak tersentuh; tanda kurung dapat memiliki arti khusus di berbagai tempat, tetapi tidak dalam kasus ini, jadi mereka juga ditinggalkan di tempat, tetapi karena a
$
memiliki beragam makna, semuanya istimewa,\$
urutannya ditafsirkan sebagai "abaikan kekhasan tanda dolar, dan biarkan saja di sana", dan urutan itu diganti dengan tanda dolar tunggal no-selanjutnya diurai. Hasil dari semua itu ditugaskan untukPS1
, dan karena ada tanda dolar literal, dan bukan\$
urutan ajaib ketika shell membangun prompt aktual, Anda hanya mendapatkan tanda dolar, dan bukan karakter yang bergantung pada pengguna yang efektif. Penguraian sebenarnya sedikit lebih rumit, tetapi itulah intinya untuk contoh khusus ini.Apa yang Anda ketikkan:
PS1="[\u@\h \W]\$ "
Apa yang ditetapkan oleh shell:
PS1 <- "[\u@\h \W]$ "
Apa yang Anda inginkan:
PS1 <- "[\u@\h \W]\$ "
Apa yang harus Anda ketik:
PS1='[\u@\h \W]\$ '
Apa yang harus Anda lakukan selanjutnya: Baca sesuatu seperti tutorial ini untuk mempelajari lebih lanjut tentang penawaran shell.
sumber
PS1="...\\\$"
untuk memastikan bahwa pasangan literal\$
disimpan diPS1
dalam shell untuk menafsirkan nanti.Sudahkah Anda beralih ke pengguna root menggunakan
sudo su
,su
atau dengan masuk sebagai root? Gunakanid
untuk memeriksa siapa yang komputer Anda anggap Anda masuki, karena ini dapat memengaruhi profil mana yang sebenarnya Anda sunting.Lihatlah jawaban untuk /ubuntu/305052/changing-behavior-of-bash-prompt-when-functioning-as-root
sumber