화면에 표준 bash 쉘처럼 동작하도록 요청하려면 어떻게합니까?


37

리눅스에서 화면 명령에 대해 방금 배웠습니다. 그것은 천재입니다. 나는 그것을 좋아한다. 그러나 화면의 실제 터미널 / 프롬프트는 표준 bash 프롬프트와 다르게 보이고 동작합니다. 즉, 색상이 동일하지 않고 탭 완성이 작동하지 않는 것 같습니다.

화면이 정상적인 (적어도 익숙한 것처럼 정상) bash 프롬프트처럼 작동하도록 말할 수있는 방법이 있습니까?

추가 정보

나는 ssh를 통해 Mac (Terminal)에서 headless linux box (Ubuntu)로 연결하고 있습니다. 로그인 한 후 TERM=xterm-color화면을 실행하면 화면이 나타납니다 TERM=screen.

$TERM값을 먼저 변경할 수 있는지 아래 제안 사항을 시도해 보겠습니다 .


호기심 때문에 화면을 시작할 때 어떤 OS를 사용하고 있습니까? 귀하의 문제는 터미널이 잘못하거나 화면을 잘못 식별하는 것과 더 관련이 있다고 생각합니다.
Zoredache

@Zoredache-위의 정보를 게시물에 추가했습니다. 감사. 백 스페이스 키가 작동하도록 터미널 설정을 조정해야했습니다.
thornomad

ck, 나는 정말로 Terminal.app을 좋아하지 않는다. 개인적으로 나는 당신이 대안 참조를 사용하는 것이 좋습니다 ( serverfault.com/questions/19240/… )
Zoredache

답변:


38

이 게시물 덕분에 내가 한 일은 한 줄을 추가하는 것이 었습니다 ~/.screenrc.

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

당신의 그런 일들이 ~/.bashrc, /etc/bashrc등 실행을하셔야합니다.


13

screen은 용어 유형을로 변경합니다 screen. 다음 두 가지 중 하나를 수행 할 수 있습니다.

  1. 귀하의 용어 설정을 변경하십시오 .screenrc
  2. 당신의 수정 .bashrc파일을 찾을 TERM=screen뿐만 아니라,TERM=xterm

4
감사! 내가 만든 $HOME/.screenrc파일을 상단에이 줄을 추가 : term xterm-color및 WA 라! 색상 프롬프트와 $TERM값이 일치합니다. 그러나 탭 완성이 없습니다 ...
thornomad

탭 완성 기능을 설정하는 방법을 파헤쳐 야합니다. 기본 쉘 구성 스크립트는 그들이 사용하는 것에 대해 완전히 일관성이 없습니다 $TERM. 어떤 것들은 xterm뿐만 아니라 xterm으로 가능하게 할 것이고, 다른 것들은 xterm만을 찾습니다. 다른 것에는 다른 스위치가 있습니다.
staticsan

11

나는 당신이 당신의 질문을 쓴 방식이 마음에 들었습니다. 나는 같은 것을 묻고 있었고 그것을 알아내는 데 약간의 시간이 걸렸습니다. 나는 이미 쉘 호출에 대해 조금 알고 있었기 때문에 문제가 어딘가에 있다고 생각했다.

여기 내 결과가 있습니다. 첫째, 개인적으로 로그인 쉘과 비 로그인 쉘의 차이점을 아는 것이 흥미롭고 가치 있다고 생각합니다. 를 수행 man $SHELL하고 그것에 대해 자세한 내용을 호출로 섹션을 검색합니다.

shopt login_shell프롬프트에서 를 실행하여 현재 쉘 인스턴스에 로그인 쉘 또는 비 로그인 쉘인지 물어볼 수 있습니다 . 이것은 일반적으로 읽기 전용 옵션입니다.

내 데비안 시스템에서는 screen항상 비 로그인 쉘로 기본 설정되어 있습니다.

웹을 검색하고 읽은 후에 man $SHELL몇 가지 사항을 테스트했으며 다음 두 가지 접근 방식이 효과적이었습니다. 에서 ~/.screenrc다음과 같이 추가 / 행을 업데이트 :

shell -$SHELL

그래도 해결되지 않고를 사용하고 있다면 Seamus가bash 공유 한 것처럼 시도해 볼 수 있습니다 .

defshell -bash

언급 한 바와 같이 shopt login_shell프롬프트에서 발행하여 현재 쉘 인스턴스가 로그인 쉘인지 테스트 할 수 있습니다 .


현재 디렉토리에서 쉘을 시작하는 방법이 있습니까? 내가 원하는 것의 예는 다음과 같습니다 cd ~/Projects ; screen ; pwd #=> ~/Projects. 그러나, 나는 추가 한 후 무엇을 얻을 shell -$SHELL내에 ~/.screenrcIScd ~/Projects ; screen ; pwd #=> ~/
rudolph9

9

Bash 실행 방법에 따라 로그인 셸을 실행하고있을 수 있습니다. 를 screen실행하면 비 로그인 대화식 셸이 실행됩니다.

시작 스크립트가 실행되는 차이점이 있습니다.

  • /etc/bash.bashrc다음 ~/.bashrc비 로그인 대화 형 쉘이 시작될 때 공급됩니다

  • /etc/profile대화식 로그인 셸이 시작될 때 처음 발견 된 ~/.bash_profile, ~/.bash_login~/.profile

이것은 당신에게 영향을 줄 수 있습니다.

또한 $TERM다른지 확인합니다 .


2

screen은 bash를 대체하지 않으며, bash 또는 다른 쉘을 실행합니다. 어쩌면이 실행중인 csh, zsh또는 bash하지만 서로 다른 paramters과 함께.

내가 시도 할 것이다 제일 먼저 확인하는 것입니다 ps그리고 /proc/<pid>/cmdline그것은 같은 동일한 매개 변수와 같은 쉘을 사용하고 있는지 확인을 login한다.

그 후, FILES 섹션 /etc/screenrc에서 언급 된 다른 파일을 확인 man screen하십시오.


나는 ps명령을 실행했는데 bash실행 중임을 보여줍니다 (화면 내부의 ps 명령입니다) ... 색상을 얻었습니다 (위) 탭 완성이 필요합니다.
thornomad

2

화면을 실행했을 때 같은 문제가 발생했습니다.

~ / .bash_profile에서 이와 같이 실행 중입니다.

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

이것은 화면이 bash_profile을 실행할 때 PS1이 이월되지 않음을 의미합니다.

다음과 같이 ~. / bash_profile의 PS1 문에 내보내기를 추가하십시오.

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

마찬가지로 중첩 된 실행에서 변수가 손실되지 않습니다.


1

"defshell -bash"에 대한 정보를 추가하고 싶습니다 (수개월 동안 머리를 긁은 후 방금 알아 냈습니다). 그렇게하면, 화면에 의해 실행되는 자식 쉘은 "/ bin / bash"대신 $ SHELL을 "bash"로 설정합니다. 그런 다음 화면 세션 내에서 "스크립트"를 실행하면 다음과 같은 결과가 나타납니다.

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

또는 적어도 그것은 내 우분투 14.04 상자에서 일어나는 일입니다. 내가 사용한 해결 방법은 실행하는 것 $ SHELL=/bin/bash script입니다. 나는 $ SHELL을 잘못 설정하면 다른 것들이 깨질 것이라고 상상할 수 있지만 스크립트는 내가 주목 한 것입니다.


0

.profile쉘 초기화가 시작되기 전에이 스 니펫을 사용하고 있습니다 . 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 }

그런 다음 실행중인 스크린 세션이 없으면 표준 쉘 프롬프트에 빠지지 않습니다. sudopasword에 대한 프롬프트가 하나 더 있습니다 (서버를 관리하기 위해 로그인 한 시간의 99 % 이후). 긴 작업을 수행하려는 경우 sudo 로그인을 취소하고 사용자 세션에서 화면을 수동으로 시작하고 sudo를 거기에 있습니다.

여기서 중요한 점은 "쉘 초기화 전"이므로 이미 실행중인 화면 세션이있는 경우 로케일 및 기타 항목으로 이미 초기화되어 있으며 다시 실행할 필요가 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.