Bash 스크립트의 종료 사례 후 SSH 종료

Bash 스크립트의 종료 사례 후 SSH 종료

그래서 다음과 같은 표준 스크립트가 있습니다.

    #!/bin/bash
    PS3='Please enter your choice: '
    options=("option 1" "Option 2" "Option 3" "Quit")
    select opt in "${options[@]}"
    do
        case $opt in
            "Option 1")
                echo "you chose choice 1"
                ;;
            "Option 2")
                echo "you chose choice 2"
                ;;
            "Option 3")
                echo "you chose choice 3"
                ;;
            "Quit")
                break
                ;;
            *) echo invalid option;;
        esac
    done

그러나 SSH를 통해 스크립트를 실행하고 "종료" 옵션을 선택하면 SSH도 종료됩니다. 무엇이 문제를 일으킬 수 있나요? 스크립트를 종료하고 SSH에서 계속 작업하고 싶습니다.

문제는 아래에서 논의하는 .bash_aliases 파일에 있습니다. 나는 exec대본 앞에 놓였다 . 그것을 제거하고 명령을 실행하면 모든 것이 잘 작동합니다.

답변1

설명하신 동작에 따르면 다음과 같이 스크립트를 실행하는 것처럼 들립니다.

$ ssh remote picker.bash

ssh원격 시스템에 접속 하면 예상대로 작동합니다. 주로 스크립트가 완료된 후에도 원격 서버에 남아 있습니다.

원격 컴퓨터와 노트북이라는 두 대의 컴퓨터가 있다고 가정해 보겠습니다. 래피에는 "L"을 사용하고 원격에는 "R"을 사용합니다.

L$ ssh remotey

R$ ./picker.bash
1) option 1
2) Option 2
3) Option 3
4) Quit
Please enter your choice: 4

R$

ssh그러나 이와 같이 스크립트를 실행하면 설명된 터미널 사라지는 동작이 발생합니다.

L$ ssh remotey ./picker.bash
1) option 1
2) Option 2
3) Option 3
4) Quit
Please enter your choice: 4

L$

답변2

옵션 4에서 하위 쉘을 시작할 수 있지만 "exec /bin/bash --login"을 사용하여 시도했을 때 하위 쉘의 프롬프트가 손실되어 원격 쉘을 사용하기가 약간 어려워졌습니다.

ssh 매뉴얼 페이지에서는 쉘 Xor 명령을 실행할 수 있지만 동시에 둘 다 실행할 수는 없다고 제안하는 것 같습니다.

개요 ssh [다양한 옵션] [사용자@]호스트 이름 [명령] ...

명령이 지정되면 로그인 쉘이 아닌 원격 호스트에서 실행됩니다.

...

서버가 사용자의 신원을 승인하면 서버는 주어진 명령을 실행하거나 컴퓨터에 로그인하고 사용자에게 원격 컴퓨터의 일반 셸을 제공합니다.

...

원격 시스템의 명령이나 셸이 종료되면 세션이 종료됩니다.

답변3

실행하면 ssh remotehost somescript스크립트가 실행되고 그게 전부입니다. 원격 명령을 지정하지 않으면 대화형 쉘만 얻게 됩니다. 대화형 쉘이 기본 원격 명령입니다. 스크립트가 종료되면 원격 세션이 종료됩니다.

스크립트 후에 대화형 셸을 실행하려면 둘 다 원한다고 SSH에 알리세요. -t원격 호스트에 터미널을 가져오려면 이 옵션을 추가하세요 . 기본적으로 SSH는 명령을 지정할 때가 아니라 대화형 셸을 실행하라고 지시할 때만 터미널을 생성합니다.

ssh -t remotehost '/path/to/script; exec bash'

스크립트에 정의된 환경 변수는 사용할 수 없습니다. 필요한 경우 대신 원격 셸에서 스크립트를 가져옵니다. 또한 이를 통해 스크립트에서 세션을 닫을 수 있습니다. exit스크립트가 종료될 뿐만 아니라 모든 세션이 셸 내에서 실행되므로 전체 원격 세션도 종료됩니다.

ssh -t remotehost '. /path/to/script; exec bash'

답변4

문제는 bash_aliases에 있습니다. exec스크립트 전에 삭제 해야합니다 . bash_aliases 파일은 이제 다음과 같습니다:

command="/path/to/script.sh"

이로 exec인해 SSH가 세션을 종료합니다.

관련 정보