Bagaimana mengubah prompt subshell

8

Saya mencoba membuat skrip sederhana yang, antara lain, akan membuat subkulit:

#!/bin/sh

# setup

"${@:-$SHELL}"

# teardown

Pertanyaannya adalah: Saya perlu mengubah prompt default, jadi misalnya:

$ # shell default
$ ./myscript
(myscript) $ # subshell
(myscript) $ exit
$

Saya mencoba untuk mengubah PROMPTdan PS1, tetapi tidak ada yang berhasil. Bagaimana saya bisa melakukan itu?

PS: Saya butuh solusi yang bekerja baik pada Bash dan ZSH, jika memungkinkan.

Lucas Sampaio
sumber
Kemungkinan publikasi mempublikasikan PS1 pada
Thomas Nyman
Tidak persis duplikat karena pertanyaan lain bashhanya untuk itu .
Stéphane Chazelas
Apakah terlihat seperti duplikat yang tepat ;-(
daisy

Jawaban:

7

Saya pikir Anda dapat membuat subkulit dengan prompt berbeda seperti ini:

$ bash --rcfile <(echo "PS1='subshell prompt: '") -i

Contoh

Env saat ini:

$ bash --rcfile <(echo "PS1='subshell prompt$ '") -i

Di sub shell:

subshell prompt$ echo hi
hi
subshell prompt$ exit
exit

Kembali ke shell asli:

$ 
slm
sumber
1
Anda bisa menggunakan here stringsubstitusi alih - alih proses. mis <<< "PS1...".
jordanm
1
@jordanm - dapatkah Anda memberikan contoh? Saya main-main dengan ini tetapi tidak bisa mendapatkan contoh kerja menggunakan string di sini.
slm
2

Alasan itu tidak bekerja mungkin karena ketika Anda memuat shell (yang harus misalnya .: /bin/bash), itu akan berakhir reload file konfigurasi, yang meliputi variabel lingkungan untuk prompt (misalnya .: $HOME/.bashrc) setelah yang melewati variabel lingkungan yang Anda inginkan - sehingga variabel Anda dibuang.

Anda mungkin ingin memeriksa opsi shell untuk memuat file konfigurasi khusus (mis .: --rcfiledalam Bash IINM) dan menggunakannya juga \envuntuk meneruskan variabel lingkungan yang Anda inginkan. Masalahnya adalah bahwa sekali Anda melakukan itu, menembakkan subkulit menjadi tergantung pada shell.

( CAVEAT EMPTOR : Saya belum menganggap ini sebagai jawaban - khususnya, saya belum mencoba semua ini di sistem saya.)

Luis Machuca
sumber