Jika sshd Anda tidak menyediakan variabel yang berguna, Anda bisa menggunakan
ps -p $PPID
atau trik ps random acak lainnya (jika shell Anda tidak disetel $PPID
) untuk melihat apakah proses induk shell adalah proses login-jauh Anda atau tidak. Lalu jika parent-is-remote-thingie ganti $ PS1. Dan kemudian unduh OpenSSH dan gunakan saran geekosaur / Caleb karena server ssh Anda adalah sampah. ;)
Atau, Anda dapat menggunakan output "who am i", ambil kolom terakhir (yaitu, $( who am i | awk '$0=$NF')
), dan periksa untuk melihat apakah host adalah remote atau lokal untuk memutuskan apakah Anda login secara lokal atau jarak jauh.
Atau Anda dapat mengaktifkan output $(hostname)
agar shell Anda menggunakan $ PS1 yang sesuai pada host tertentu.
Atau, mari kita benar-benar menjadi gila. Jika Anda menggunakan shell modern - seperti bash, ksh93, atau zsh, Anda dapat mengambil keuntungan dari kenyataan bahwa $ PS1 dievaluasi ulang saat dieksekusi. Jadi, Anda bisa menyertakan blok bersyarat inline untuk melakukan hal-hal gila jika cwd Anda berada di dalam repositori, dan sesuatu yang lain di luar. Sebagai contoh, di sini saya membuat perubahan prompt saya tergantung pada direktori saya menggunakan [[ conditional ]] && $( echo "whatever it should be if true) || $( echo "whatever should be the if-not-true prompt" )
, pada dasarnya.
default prompt$ PS1='$(id -un) @ $(hostname)$( [[ $(pwd) = /tmp ]] && echo " [I am in /tmp]" || echo " /not/in/tmp")$ '
myname @ host /not/in/tmp$ cd /tmp
myname @ host [I am in /tmp]$ cd /etc
myname @ host /not/in/tmp$
Tentu, definisi $ PS1 akan terlihat gila di profil Anda, tetapi Anda kemudian hanya mendapatkan hal-hal git yang sangat berwarna ketika Anda benar-benar berada di repositori git, sementara Anda memiliki warna biasa di tempat lain. :) Perhatikan bahwa Anda harus menggunakan tanda kutip tunggal di sekitar tugas PS1. Anda tidak ingin variabel diperluas ketika PS1 ditugaskan; Anda ingin mereka diperluas ketika $ PS1 dievaluasi nanti. Jadi, kutip tunggal.