Saya baru mengenal bash dan ingin agar prompt saya menunjukkan sesuatu yang dalam tcsh sepele, namun setelah pencarian google yang baik saya masih belum bisa melakukannya.
Saya ingin prompt saya menyertakan hanya direktori saat ini dan direktori induk seperti ini:
/parent/currentdir $
Dalam tcsh ini dicapai dengan:
set prompt = "%C2 %"
Namun dalam bash sejauh ini saya hanya menemukan bahwa saya harus mengurai pwd untuk mendapatkan hasil yang sama.
Apakah tidak ada cara yang lebih sederhana, seperti melakukan:
export PS1="$(some_command) $"
PS1='\w \$'; PROMPT_DIRTRIM=2
seharusnya memberi Anda setara bash, tetapi itu tidak berfungsi dengan baik pada sistem saya.PROMPT_DIRTRIM
diperkenalkan di Bash 4 . Saya baru saja menguji pada Ubuntu 16.04 di bawah WSL dan itu berhasil!Jawaban:
Fitur kontrol cepat Bash agak statis. Jika Anda ingin lebih banyak kontrol, Anda bisa memasukkan variabel di prompt Anda; pastikan Anda belum mematikan
promptvars
opsi .Perhatikan tanda kutip tunggal: ekspansi variabel harus terjadi pada saat prompt ditampilkan, bukan pada saat
PS1
variabel didefinisikan.Jika Anda ingin lebih mengontrol apa yang ditampilkan, Anda dapat menggunakan pergantian perintah. Misalnya, cuplikan di atas kehilangan
~
singkatan untuk direktori home.Kode ini agak rumit, jadi alih-alih menempelkannya ke dalam
PS1
variabel, Anda bisa menggunakanPROMPT_COMMAND
variabel untuk menjalankan kode untuk mengaturHPWD
dan kemudian menggunakannya dalam prompt Anda.Karena prompt yang diperpendek hanya berubah pada perubahan direktori, Anda tidak perlu menghitung ulang setiap kali prompt ditampilkan. Bash tidak menyediakan pengait yang berjalan pada perubahan direktori saat ini, tetapi Anda dapat mensimulasikannya dengan menimpa
cd
dan sepupunya.Perhatikan bahwa Anda tidak perlu, dan tidak boleh, mengekspor
PS1
, karena ini adalah pengaturan shell, bukan variabel lingkungan.PS1
Pengaturan bash tidak akan dimengerti oleh shell lain.PS Jika Anda ingin pengalaman shell interaktif yang bagus, beralihlah ke zsh , di mana semua ini (
%
ekspansi cepat sebagian besar mencakup tcsh'schpwd
,, dll.) Adalah fitur asli.sumber
Sintaks untuk mendapatkan orang tua dan direktori saat ini diambil dari jawaban Munai .
Namun, seperti yang dicatat oleh Gilles, kode itu hanya menunjukkan direktori saat
.bashrc
ini saat dimuat, tetapi tidak akan berubah saat Anda menavigasi sistem ke folder lain.Memiliki ini di
.bashrc
file Anda membuat prompt diperbarui secara otomatis ke direktori Anda saat ini:sumber
prompt_command()
harus melakukan sesuatu sendiri? Bukan untuk saya. Apakah Anda bermaksud juga menggunakanprompt_command()
definisi ulang daricd
& co, seperti yang dilakukan Gilles? Atau maksud AndaPROMPT_COMMAND='...'
?$PWD
berisi spasi./
? Seperti yang tertulis, Anda mendapatkan/// $
Prompt string dapat dengan mudah diubah
bash
dengan mengedit variabel shellPS1
. Ini adalah singkatan dari Prompt String 1. Info lebih lanjut di sini .Untuk sekarang jalankan
bash
cangkang Anda .vi ~/.bashrc
Tambahkan definisi PS1 dalam file
Lebih banyak tutorial di sini dan di sini , untuk membantu Anda mengubah lebih banyak lagi.
sumber
.bashrc
dimuat, prompt tidak akan berubah jika Andacd
ke direktori lain! @twalbaumMungkin lebih sederhana dengan "~" untuk direktori Home.
sumber
sumber
Pengaturan
PROMPT_DIRTRIM=2
harus semua yang Anda butuhkan.sumber