Ekranın standart bir bash kabuğu gibi davranmasını nasıl isteyebilirim?


37

Sadece Linux üzerinde ekran komutunu öğrendim - bu dahi. Onu seviyorum. Bununla birlikte, ekrandaki asıl terminal / istem, standart bash istemimden farklı görünüyor ve davranıyor. Yani renkler aynı değil, sekme tamamlama çalışmıyor gibi görünüyor.

Ekranın normal (en azından alışkın olduğum gibi) normal bir şekilde davranmasını söyleyebileceğim bir yöntem var mı?

ek bilgi

Bir Mac'ten (Terminal) ssh üzerinden başsız bir linux kutusuna (Ubuntu) bağlanıyorum. Giriş yaptıktan sonra sahibim TERM=xterm-colorve ekranı çalıştırdığımda kullanıyorum TERM=screen.

$TERMÖncelikle değeri değiştirip değiştiremeyeceğimi görmek için aşağıdaki önerileri deneyeceğim .


Sadece merak uyandıran ne işletim sistemi ve ne zaman açılış ekranı ne tür bir terminale sahipsin? Sorunlarınızın Terminal'in yanlış bir şey yapması veya ekranın yanlış tanımlanması ile ilgisi olduğunu tahmin ediyorum.
Zoredache

@Zoredache - Bu bilgiyi yukarıdaki yazıya ekledim. Teşekkürler. Backspace anahtarının çalışmasına izin vermek için Terminal ayarlarımı değiştirmek zorunda
kaldım

Yuck, gerçekten Terminal.app'ten hoşlanmıyorum. Şahsen, alternatif bir görüş kullanmayı düşünmenizi öneririm ( serverfault.com/questions/19240/… )
Zoredache

Yanıtlar:


38

Sayesinde bu yazı , ne yaptığını bir satır eklemek oldu ~/.screenrc:

# ~/.screenrc
defshell -bash      # dash makes it a login shell

Gözlerinde farklı Sonra işler ~/.bashrc, /etc/bashrcvb çalıştırmak iyi olur.


13

ekran, terim türünü değiştirir screen. İki şeyden birini yapabilirsiniz:

  1. ayarınızdaki terim ayarını değiştirin .screenrc
  2. .bashrcdosyalarınızı değiştirmenin TERM=screenyanı sıraTERM=xterm

4
Teşekkürler! Bir $HOME/.screenrcdosya oluşturdum ve bu satırı en üste ekledim: term xterm-colorve wa la! Renk istemi ve $TERMdeğerler eşleşiyor. Ancak, tab-tamamlama yok ...
thornomad

Sekme tamamlanmasının neyin başladığını neye kazmanız gerekir. Varsayılan kabuk yapılandırma komut dosyaları, temelde neyi etkinleştirdikleriyle ilgili olarak tamamen tutarlı değildir $TERM; Bazı şeyler xterm renginin yanı sıra xterm rengini de etkinleştirir, diğerleri sadece xterm'i arar. Başka şeylerin başka anahtarları da var.
staticsan

11

Sorunu yazma şeklini beğendim, kendime de aynı şeyi soruyordum ve çözmem biraz zaman aldı. Kabuk çağırma hakkında çok az şey bildiğim için şanslıydım, bu yüzden sorunun orada bir yerde olduğunu düşündüm.

İşte bulgularım. Birincisi, şahsen bunu ilginç buluyorum ve bir giriş kabuğu ile giriş yapmayan bir kabuk arasındaki farkı bilmeye değer. Bunu yapın man $SHELLve hakkında daha fazla bilgi edinmek için İNCELEME bölümünü arayın.

Şu anki kabuk örneğinize, oturum açma shopt login_shellistemi veya oturum açma dışı bir kabuk olup olmadığını istekte bulunarak sorabilirsiniz . Bu normalde salt okunur bir seçenektir.

Debian sistemlerimde, screenher zaman oturum açma kabukları ile varsayılan olarak geldi.

İnterneti araştırdıktan ve okuduktan sonra man $SHELLbirkaç şeyi denedim ve aşağıdaki iki yaklaşım benim için işe yaradı. Aşağıdaki ~/.screenrcgibi bir satır eklemek / güncellemek için:

shell -$SHELL

Bu işe yaramazsa VE kullanıyorsanız bash, alternatif olarak Seamus tarafından paylaşılan deneyebilirsiniz :

defshell -bash

Bahsedildiği gibi, mevcut kabuk örneğinizin shopt login_shellisteminizi belirterek bir giriş kabuğu olup olmadığını test edebilirsiniz .


Kabuğun geçerli dizinde başlatılması gereken yol mu? Ben ne arzu örneği şudur cd ~/Projects ; screen ; pwd #=> ~/Projects. Ancak, ben ekledikten sonra ne olsun shell -$SHELLbenim için ~/.screenrc, IScd ~/Projects ; screen ; pwd #=> ~/
rudolph9

9

Bash'i nasıl kullandığınıza bağlı olarak, bir giriş kabuğu çalıştırıyor olabilirsiniz. Eğer çalıştırdığınızda screen, olmayan bir giriş etkileşimli kabuk azalıyor.

Aradaki fark, başlangıç ​​komut dosyalarının çalıştırılmasıdır.

  • /etc/bash.bashrcdaha sonra ~/.bashrcgiriş yapmayan etkileşimli bir kabuk başlatıldığında kaynaklanır

  • /etc/profileDaha sonra ilk bulundu ~/.bash_profile, ~/.bash_loginve ~/.profileinteraktif bir giriş kabuğu başlatıldığında kaynaklıdır

Bu seni etkiliyor olabilir.

$TERMFarklı olup olmadığını da kontrol ederim .


2

ekran bash'ın yerini almaz, çalıştırır ya da başka bir kabuk kullanır. belki koşuyor csh, zshya da bashama farklı parametrelerle.

deneyeceğim ilk şey, kontrol etmek psve /proc/<pid>/cmdlineaynı parametrelerle aynı kabuğu kullandığından emin olmak login.

Bundan sonra /etc/screenrc, man screenFILES bölümünde belirtilen ve herhangi bir dosyayı kontrol edin .


psKomutu çalıştırdım ve çalıştığını gösteriyor bash(bu ekranın içindeki ps komutudur) ... Renklerin çalışmasını sağladım (yukarıda) sadece sekme tamamlama gerekiyor.
thornomad

2

Ben de aynı problemi yaşadım, ekran koştuğumda ustaca bulduğum harika PS1 renk istemini kaybettim: P.

Sorun şu şekilde çalıştırıyordum ~ / .bash_profile içinde

PS1="\[\033[35m\]\t\[\033[m\]-\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ "

Bu, ekran bash_profile çalıştırırken PS1'in taşınmadığı anlamına gelir.

Düzeltmek kolaydır: Bu gibi görünmesi için ~. / Bash_profile dosyasındaki PS1 deyimine ihracat ekleyin:

export PS1="\[\033[35m\]\t\[\033[m\]-\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ "

Bunun gibi değişken iç içe yürütme içinde kaybolmaz.


1

Sadece "defshell -bash" (aylar süren tırmalamadan sonra anladım) hakkında bir şeyler eklemek istiyorum. Bunu yaptığınızda, ekran tarafından çalıştırılan alt kabuk, normalde olduğu gibi "/ bin / bash" yerine "bash" olarak ayarlanmış $ SHELL değerine sahiptir. Daha sonra ekran oturumunuzda "script" çalıştırırsanız, şunları elde edersiniz:

$ script
Script started, file is typescript
script: failed to execute bash: No such file or directory

Ya da en azından Ubuntu 14.04 kutumda olan budur. Kullandığım geçici çözüm, çalıştırmaktır $ SHELL=/bin/bash script. $ SHELL'ın yanlış ayarlanmasının başka şeyleri bozacağını hayal ediyorum, ama senaryo farkettim.


0

.profileHerhangi bir kabuk başlatma başlatılmadan önce bu kod parçasını kullanıyorum : 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 }

Sonra, eğer hiç bir ekran oturumu çalışmıyorsa, ben… peki, standart kabuk istemine girmiyorum. sudoParola için bir komut istemi daha var (sunucuyu yönetmek için oturum açtığım zamanın% 99'undan beri) ve uzun bir görev gerçekleştirmeyi planlıyorsam, sudo girişini iptal ediyorum, kullanıcının oturumunda manuel olarak ekranı açıyorum ve orada sudo.

Buradaki kilit nokta "herhangi bir kabuk başlatmadan önce" dir, bu nedenle zaten çalışan bir ekran oturumunuz olduğunda, yerel ayarlarla ve diğer öğelerle zaten başlatılmış olur ve tekrar tekrarlamanıza gerek yoktur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.