Mengkloning jalurnya mudah jika Anda dapat menjalankan program terminal dari baris perintah. Dengan asumsi Anda menggunakan xterm
, jalankan saja xterm &
dari prompt terminal yang ingin Anda tiru. Xterm baru akan mulai di direktori yang sama, kecuali Anda sudah mengonfigurasi untuk memulai sebagai shell login. Setiap variabel lingkungan yang diekspor juga akan terbawa, tetapi variabel yang tidak diekspor tidak akan.
Cara cepat dan kotor untuk mengkloning seluruh lingkungan (termasuk variabel yang tidak diekspor) adalah sebagai berikut:
# from the old shell:
set >~/environment.tmp
# from the new shell:
. ~/environment.tmp
rm ~/environment.tmp
Jika Anda telah mengatur opsi shell khusus, Anda harus menerapkannya kembali juga.
Anda bisa membungkus seluruh proses ini menjadi skrip yang mudah dijalankan. Biarkan skrip menyimpan lingkungan ke file yang diketahui, lalu jalankan xterm
. Minta .bashrc Anda memeriksa file itu, dan sumber dan hapus jika ditemukan.
Sebagai alternatif, jika Anda tidak ingin memulai satu terminal dari yang lain, atau hanya ingin lebih banyak kontrol, Anda bisa menggunakan sepasang fungsi yang Anda tentukan di .bashrc:
putstate () {
declare +x >~/environment.tmp
declare -x >>~/environment.tmp
echo cd "$PWD" >>~/environment.tmp
}
getstate () {
. ~/environment.tmp
}
EDIT : Berubah putstate
sehingga menyalin status "diekspor" dari variabel shell, sehingga cocok dengan metode lainnya. Ada hal-hal lain yang dapat disalin juga, seperti opsi shell (lihat help set
) - sehingga ada ruang untuk perbaikan dalam skrip ini.
bash
akan menjalankan perintah dalam file dan kemudian keluar, dan lingkungan shell saat ini tidak akan berubah.Jika Anda memulai
screen
(Layar GNU) di lingkungan yang Anda tentukan, lingkungan itu akan digunakan oleh sub-proses (yaituscreen
) dan Anda dapat menggunakannya untuk menelurkan terminal baru. Tetapi jika Anda ingin memotongnya lain kali (ascreen
dalamscreen
) itu mulai rumit.sumber
Dalam situasi yang sama, saya juga menemukan manfaat untuk memulai shell baru di direktori yang sama dengan yang sekarang. Saya menggunakan resep seperti ini untuk memulai shell.
Opsi -t diperlukan setiap kali Anda menjalankan shell secara eksplisit menggunakan ssh. Ini menyebabkan pseudo-tty dibuat untuk proses tersebut. Ini diperlukan agar perintah sejarah dan fitur interaktif lainnya berfungsi dengan benar. Baris sebelumnya dalam skrip mengatur DIR ke direktori saat ini dan SHELL ke shell yang disukai pengguna.
sumber
sementara variabel yang diekspor membuatnya ke sisi lain menggunakan fungsi 'getstate' di atas, untuk beberapa alasan mereka akhirnya tidak diekspor di sana (seperti dapat dilihat menggunakan os.getenv sederhana dari python). tampaknya berfungsi lebih baik bagi saya ketika memodifikasi getstate menjadi alias:
sumber