Ini adalah salinan posting saya dari stackoverflow; Saya sadar saya seharusnya bertanya di sini ...
Saya ingin menjalankan skrip yang mengubah nama host dan segera meminta bash prompt (variabel PS1) dengan nama host yang tepat. Bagaimana saya mewujudkan ini?
Saya menjalankan ini
#!/bin/bash
# Usage: ./changehost <newhostname>
#Do two sed's to edit the files for persistent hostname change
sed -i s/$(hostname)/$1/g "/etc/hosts"
sed -i s/$(hostname)/$1/g "/etc/sysconfig/network"
#run the hostname command with new hostname to update it
hostname $1
Di terminal seperti ini dan dapatkan ini
[user@host dir]# ./changehost newhostname
[user@host dir]#
Tapi yang saya inginkan adalah ini
[user@host dir]# ./changehost newhostname
[user@newhostname dir]#
Terminal diperbarui dengan benar hanya ketika saya membuka shell baru.
Saya juga coba lakukan
export PS1='somestring'; export PS1='[\u@\h \W]\$'
di luar skrip di terminal dan ia beralih ke 'somestring' dan kembali, tetapi nama host tidak berubah. : \
Apakah mungkin \ h disimpan dalam memori ketika proses dimulai dan tidak dapat diubah setelah startup?
$PS1
dengan kami?export PS1='somestring'; export PS1='[\u@\h \W]\$'
luar skrip di terminal dan itu beralih ke 'somestring' dan kembali, tetapi nama host tidak berubah. : \ Apakah mungkin \ h disimpan dalam memori ketika proses dimulai dan tidak dapat diubah setelah startup?Jawaban:
Jika PS1 Anda mirip dengan:
Nilai \ h hanya diset pada startup bash. Oleh karena itu, jika Anda mengubah nama host, Anda harus memulai contoh bash baru:
Akan mengganti bash dengan instance baru (dengan nilai \ h diperbarui). Sayangnya, ini akan keluar dari skrip yang sedang berjalan. Beberapa keajaiban lain diperlukan untuk membuat perubahan untuk skrip shell yang mengikuti kode eksekusi setelah perubahan nama host. Saya percaya bahwa skrip yang sama tidak dapat tetap berjalan dengan nama host dan pembaruan
\h
. Tetapi saya juga percaya bahwa itu bukan yang Anda minta.sumber
dua masalah
PS1 diatur sekali, Anda harus mengatur ulang setelah nama host diubah.
Anda dapat mengedit skrip dengan
di akhir, tetapi skrip harus dijalankan sebagai
perhatikan titik terkemuka.
Jika Anda tidak menggunakan titik awal, PS1 akan diatur dalam shell sementara baru dan hilang.
Tidak jelas apakah bash memperbarui nilai hostname (nama pengguna) (disimpan dalam / h, / u) setelah dijalankan karena nilai tersebut tidak mungkin berubah.
Namun bash menjaga PATH.
sumber
export PS1='[\u@'$(hostname)'\h \W]\$'
Apa gunanya $ (nama host)? \ h harus menjadi nama pendek dari nama host, benar?export
luar skrip, di terminal saya menjalankan skrip, saya masih tidak mendapatkan PS1 yang diperbarui. Catatan, saya dapat mengubah PS1 menjadi apa saja, tetapi nilai \ h tidak diperbarui!1) Anda tidak mengubah nama host. Jika Anda benar-benar ingin mengubah nama host, Anda perlu menelepon:
uname -S newname
atau
hostname newname
tergantung pada OS yang Anda gunakan.
2) Tidak jelas apakah bash membaca ulang hostname
\h
. Jika Anda ingin selalu melihat nama host saat ini, hubungi:sumber
hostname newname
, dan itu tetap ada di terminal panggilan, bahkan ketika menjalankan skrip tanpa sumber itu. Menjalankanexport PS1='`hostname`'
tidak mengubah PS1 dengan benar menjadi nama host baru, tetapi jika saya tidak bisa mendapatkan\h
variabel untuk memperbarui, saya hanya akan mendapatkan pengguna untuk keluar dari shell.Sepertinya bash tidak membaca nama host saat ini pada setiap tampilan prompt, jadi Anda harus memberi tahu bash untuk membacanya kembali. Anda dapat mencoba dengan:
atau
sumber
export PS1='somestring'; export PS1='[\u@\h \W]\$'
luar skrip di terminal dan itu beralih ke 'somestring' dan kembali, tetapi nama host tidak berubah. : \ Apakah mungkin \ h disimpan dalam memori ketika proses dimulai dan tidak dapat diubah setelah startup?Dimungkinkan untuk menetapkan nama host sistem secara langsung dengan
hostname
utilitas pada banyak sistem operasi, namun jika Anda memilih untuk mengedit file dengan tangan di sini adalah versi augmented dari skrip Anda. Saya menambahkan tes untuk keberadaan argumen pengguna, cadangan untuk file asli dan bersumber .bashrc pengguna di akhir skrip.sumber
bash -i