Baru belajar tentang perintah layar di linux - itu jenius. Aku menyukainya. Namun, terminal / prompt aktual di layar terlihat dan berperilaku berbeda dari standar bash prompt saya. Artinya, warnanya tidak sama, pelengkapan tab sepertinya tidak berfungsi, dll.
Apakah ada cara saya dapat memberitahu layar untuk berperilaku seperti bash prompt yang normal (setidaknya, normal seperti yang saya terbiasa)?
informasi tambahan
Saya terhubung melalui ssh dari Mac (Terminal) ke kotak linux tanpa kepala (Ubuntu). Setelah masuk, saya miliki TERM=xterm-color
dan ketika saya menjalankan layar saya miliki TERM=screen
.
Saya akan mencoba saran di bawah ini untuk melihat apakah saya dapat mengubah $TERM
nilainya terlebih dahulu.
bash
gnu-screen
xterm
thornomad
sumber
sumber
Jawaban:
Berkat posting ini , yang saya lakukan adalah menambahkan satu baris ke
~/.screenrc
:Kemudian hal-hal di Anda
~/.bashrc
,/etc/bashrc
, dll harus terlindas.sumber
layar mengubah jenis istilah menjadi
screen
. Anda dapat melakukan satu dari dua hal:.screenrc
.bashrc
mencari file AndaTERM=screen
jugaTERM=xterm
sumber
$HOME/.screenrc
file dan menambahkan baris ini ke atas:term xterm-color
dan wa la! Prompt warna dan$TERM
nilainya cocok. Namun, tidak ada penyelesaian tab ...$TERM
; beberapa hal akan diaktifkan dengan xterm serta xterm-color, yang lain hanya mencari xterm. Hal-hal lain memiliki switch lain.Saya suka cara Anda menulis pertanyaan Anda, saya bertanya pada diri sendiri hal yang sama dan butuh beberapa saat untuk mengetahuinya. Saya beruntung sudah tahu sedikit tentang doa shell, jadi saya pikir masalahnya ada di suatu tempat.
Inilah temuan saya. Pertama, saya pribadi menganggapnya menarik dan layak untuk mengetahui perbedaan antara shell login dan shell non-login. Lakukan
man $SHELL
dan cari bagian tentang INVOKASI untuk membaca lebih lanjut tentang hal itu.Anda dapat menanyakan instance shell Anda saat ini apakah itu shell login atau shell non-login dengan mengeluarkan
shopt login_shell
prompt Anda. Perhatikan ini biasanya opsi hanya baca.Di sistem Debian saya,
screen
selalu default dengan shell non-login.Setelah mencari di web dan membaca
man $SHELL
, saya menguji beberapa hal dan dua pendekatan berikut berhasil bagi saya. Di~/.screenrc
add / memperbarui baris sebagai berikut:Jika itu tidak berhasil DAN Anda menggunakan
bash
, Anda bisa mencoba, seperti dibagikan oleh Seamus :Seperti disebutkan, Anda dapat menguji apakah instance shell Anda saat ini adalah shell login dengan mengeluarkan
shopt login_shell
prompt Anda.sumber
cd ~/Projects ; screen ; pwd #=> ~/Projects
. Namun, apa yang saya dapatkan setelah menambahkanshell -$SHELL
ke saya~/.screenrc
adalahcd ~/Projects ; screen ; pwd #=> ~/
Bergantung pada bagaimana Anda terbiasa menjalankan Bash, Anda mungkin menjalankan shell login. Ketika Anda menjalankan
screen
, Anda menjalankan shell interaktif non-login.Perbedaannya adalah di mana skrip startup dijalankan.
/etc/bash.bashrc
kemudian~/.bashrc
bersumber ketika shell interaktif non-login dimulai/etc/profile
maka pertama kali ditemukan dari~/.bash_profile
,~/.bash_login
, dan~/.profile
yang bersumber ketika interaktif shell login dimulaiIni mungkin memengaruhi Anda.
Saya juga akan memeriksa untuk melihat apakah
$TERM
berbeda.sumber
layar tidak menggantikan bash, menjalankannya, atau shell lainnya. mungkin itu berjalan
csh
,zsh
ataubash
tapi dengan paramters yang berbeda.hal pertama yang akan saya coba adalah mengecek
ps
dan/proc/<pid>/cmdline
memastikan bahwa ia menggunakan shell yang sama dengan parameter yang sama sepertilogin
halnya.setelah itu, periksa
/etc/screenrc
dan file lain yang disebutkan diman screen
bagian FILES.sumber
ps
perintah dan itu menunjukkan bahwabash
sedang berjalan (ini adalah perintah ps di dalam layar) ... Saya mendapatkan warna yang berfungsi (di atas) hanya perlu penyelesaian tab.Saya memiliki masalah yang sama, ketika saya menjalankan layar saya kehilangan prompt warna PS1 keren yang saya temukan: P.
Masalahnya adalah saya menjalankannya seperti ini di ~ / .bash_profile
Itu berarti bahwa ketika layar menjalankan bash_profile PS1 tidak dibawa.
Cara mengatasinya mudah: tambahkan ekspor ke pernyataan PS1 di ~. / Bash_profile agar terlihat seperti ini:
Seperti itu variabel tidak hilang dalam eksekusi bersarang.
sumber
Hanya ingin menambahkan sesuatu tentang "defshell-bash" (yang baru saja saya ketahui, setelah berbulan-bulan menggaruk-garuk kepala). Ketika Anda melakukan itu, shell anak yang dijalankan oleh layar memiliki $ SHELL yang disetel ke "bash", bukan "/ bin / bash" seperti biasanya. Jika Anda kemudian menjalankan "skrip" di dalam sesi layar Anda, Anda mendapatkan:
Atau setidaknya itulah yang terjadi pada kotak Ubuntu 14.04 saya. Solusi yang saya gunakan adalah menjalankan
$ SHELL=/bin/bash script
. Saya akan membayangkan kesalahan set $ SHELL akan merusak hal-hal lain, tetapi script adalah apa yang saya perhatikan.sumber
Saya menggunakan cuplikan ini di saya
.profile
sebelum inisialisasi shell dimulai:which screen > /dev/null 2>&1 && { screen -q -ls if [ $? -gt 10 ]; then read -p "$(tput setaf 2)Found a running SCREEN sesion, attach?$(tput sgr0)[Y/n] " y >&2 if [ "${y:-y}" = "y" -o "$y" = "Y" ]; then screen -aDR && logout fi else echo "$(tput setaf 3)No running SCREEN sessions found.$(tput sgr0)" >&2 fi }
Kemudian, jika tidak ada sesi layar berjalan, saya ... well, saya tidak jatuh ke prompt shell standar. Ada satu lagi prompt untuk
sudo
pasword (karena 99% dari waktu saya masuk untuk mengelola server), dan jika saya berencana untuk melakukan tugas yang panjang, saya membatalkan masuk sudo, luncurkan layar secara manual di sesi pengguna saya dan sudo di sana.Titik kunci di sini adalah "sebelum inisialisasi shell", sehingga ketika Anda sudah memiliki sesi layar berjalan, sudah diinisialisasi dengan lokal dan hal-hal lain dan Anda tidak perlu mengulanginya lagi.
sumber