Właśnie poznałem komendę screen na Linuksie - jest genialna. Kocham to. Jednak rzeczywisty monit / terminal na ekranie wygląda i zachowuje się inaczej niż mój standardowy monit bash. Oznacza to, że kolory nie są takie same, uzupełnianie tabulatorów nie działa itp.
Czy istnieje sposób, w jaki mogę powiedzieć ekranowi, aby zachowywał się tak jak normalny (przynajmniej normalny jak w tym, do czego jestem przyzwyczajony) monit bash?
Dodatkowe informacje
Łączę się przez ssh z komputera Mac (terminal) z bezgłowym systemem Linux (Ubuntu). Po zalogowaniu mam, TERM=xterm-color
a kiedy uruchamiam ekran, mam TERM=screen
.
Wypróbuję poniższe sugestie, aby sprawdzić, czy mogę $TERM
najpierw zmienić wartość.
bash
gnu-screen
xterm
thornomad
źródło
źródło
Odpowiedzi:
Dzięki temu postowi dodałem jedną linię do
~/.screenrc
:Wtedy rzeczy w swoim
~/.bashrc
,/etc/bashrc
itp powinno się uruchomić.źródło
ekran zmienia typ terminu na
screen
. Możesz zrobić jedną z dwóch rzeczy:.screenrc
.bashrc
wygląd plików,TERM=screen
a takżeTERM=xterm
źródło
$HOME/.screenrc
plik i dodałem ten wiersz na górę:term xterm-color
i wa la! Kolor zachęty i$TERM
wartości są zgodne. Jednak brak tabulacji ...$TERM
; niektóre rzeczy umożliwią zarówno xterm, jak i xterm-color, inne szukają tylko xterm. Inne rzeczy mają inne przełączniki.Podoba mi się sposób, w jaki napisałeś swoje pytanie, zadałem sobie to samo i zajęło mi to trochę czasu, aby je zrozumieć. Miałem szczęście wiedzieć już trochę o wywołaniu powłoki, więc pomyślałem, że gdzieś tam leży problem.
Oto moje ustalenia. Po pierwsze, osobiście uważam to za interesujące i warte poznania różnicy między powłoką logowania a powłoką niezalogowaną. Wykonaj a
man $SHELL
i wyszukaj sekcję ZAPROSZENIE, aby przeczytać więcej na ten temat.Możesz zapytać bieżącą instancję powłoki, czy jest to powłoka logowania lub powłoka niezalogowana, wydając
shopt login_shell
polecenie w wierszu polecenia. Uwaga: zazwyczaj jest to opcja tylko do odczytu.W moich systemach Debian
screen
zawsze pojawiały się domyślne powłoki niezalogowane.Po przeszukaniu sieci i przeczytaniu
man $SHELL
przetestowałem kilka rzeczy i działały dla mnie następujące dwa podejścia. W~/.screenrc
Dodaj / zaktualizuj linię w następujący sposób:Jeśli to nie zadziała ORAZ używasz
bash
, możesz alternatywnie spróbować, jak udostępnił Seamus :Jak wspomniano, możesz sprawdzić, czy bieżąca instancja powłoki jest powłoką logowania, wydając
shopt login_shell
polecenie.źródło
cd ~/Projects ; screen ; pwd #=> ~/Projects
. Jednak po dodaniushell -$SHELL
do mnie~/.screenrc
otrzymujęcd ~/Projects ; screen ; pwd #=> ~/
W zależności od tego, jak przyzwyczaiłeś się do uruchamiania Bash, być może korzystasz z powłoki logowania. Po uruchomieniu
screen
uruchamiasz interaktywną powłokę bez logowania.Różnica polega na tym, w jaki sposób uruchamiane są skrypty startowe.
/etc/bash.bashrc
następnie~/.bashrc
są pozyskiwane podczas non-login interaktywna powłoka jest uruchamiany/etc/profile
wtedy pierwszy znaleziono w~/.bash_profile
,~/.bash_login
i~/.profile
są pozyskiwane podczas interaktywnego logowania shell jest uruchamianyTo może na ciebie wpływać.
Sprawdziłbym również, czy
$TERM
jest inaczej.źródło
screen nie zastępuje basha, uruchamia go lub jakąkolwiek inną powłokę. Może to działa
csh
,zsh
albobash
, ale z różnych paramters.pierwszą rzeczą, którą spróbuję, jest sprawdzenie
ps
i/proc/<pid>/cmdline
upewnienie się, że używa tej samej powłoki z tymi samymi parametrami cologin
robi.następnie sprawdź
/etc/screenrc
i wszelkie inne pliki wymienione wman screen
sekcji PLIKI.źródło
ps
polecenie i pokazuje, żebash
jest uruchomione (jest to polecenie ps na ekranie) ... Mam kolor działający (powyżej) po prostu potrzebuję uzupełnienia tabulacji.Miałem ten sam problem, kiedy uruchomiłem ekran, zgubiłem fajny kolor PS1, który umiejętnie znalazłem: P.
Problem polega na tym, że działałem tak w ~ / .bash_profile
Oznacza to, że gdy screen działał na bash_profile, PS1 nie jest przenoszone.
Naprawienie jest łatwe: dodaj eksport do instrukcji PS1 w pliku ~. / Bash_profile, aby wyglądał następująco:
W ten sposób zmienna nie jest tracona w zagnieżdżonym wykonaniu.
źródło
Chcę tylko dodać coś o „defshell-bash” (co właśnie wymyśliłem, po miesiącach drapania głowy). Kiedy to zrobisz, powłoka potomna uruchamiana przez screen ma $ SHELL ustawioną na „bash”, zamiast „/ bin / bash”, jak to zwykle bywa. Jeśli następnie uruchomisz „skrypt” w sesji ekranowej, otrzymasz:
A przynajmniej tak dzieje się na moim Ubuntu 14.04. Obejście, którego używam, to uruchomić
$ SHELL=/bin/bash script
. Wyobrażam sobie, że źle ustawiony $ SHELL spowoduje uszkodzenie innych rzeczy, ale zauważyłem skrypt.źródło
Używam tego fragmentu kodu w moim
.profile
przed rozpoczęciem inicjalizacji powłoki: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 }
Następnie, jeśli nie jest uruchomiona żadna sesja ekranowa, ja ... cóż, nie popadam w standardowy monit powłoki. Jest jeszcze jedno
sudo
pytanie o hasło (od 99% czasu loguję się, aby administrować serwerem), a jeśli planuję wykonać długie zadanie, anuluję logowanie do sudo, ręcznie uruchamiam ekran w sesji użytkownika i tam sudo.Kluczową kwestią jest tutaj „przed każdą inicjalizacją powłoki”, tak więc gdy masz już uruchomioną sesję ekranu, jest ona już inicjalizowana z ustawieniami regionalnymi i innymi rzeczami i nie musisz ponownie jej powtarzać.
źródło