SSH 클라이언트를 종료하지 않고 명령줄에서 반환 코드를 어떻게 설정할 수 있습니까?

SSH 클라이언트를 종료하지 않고 명령줄에서 반환 코드를 어떻게 설정할 수 있습니까?

저는 Unix를 처음 접했고 현재 파일이 규칙적이고 읽을 수 있는지 확인하기 위해 별칭을 만들어야 합니다. 불규칙한 경우 읽을 수 있는지 테스트하는 대신 종료 코드로 1을 반환해야 합니다. 읽을 수 없는 경우 종료 코드로 2를 반환해야 합니다.

alias test="if [ ! -f filename ] ; then echo 'Irregular file'; exit 1 ; fi; if [ ! -r filename ]; then echo 'Unreadable file'; exit 2; fi;

이제 문제는 실행할 때 종료하면 전체 클라이언트가 닫힌다는 것입니다. 이 문제를 해결할 방법이 있나요?

답변1

이는 Google에서 검색할 때 첫 번째 링크이기 때문입니다.

출구를 괄호로 묶으면

(exit 2)

그런 다음 괄호로 묶인 하위 쉘을 종료하여 반환 코드를 설정하고 현재 쉘을 종료하지 않습니다. 그런 다음 $?를 사용하여 코드를 테스트할 수 있습니다. 평소처럼

alias mytest="if [ ! -f filename ] ; then echo 'Irregular file'; (exit 1) ; elif [ ! -r filename ]; then echo 'Unreadable file'; (exit 2); fi"

답변2

쉘 함수는 return원하는 대로 값을 얻을 수 있어야 합니다.

checktype() {
    if [ ! -f "$1" ] ; then 
        echo 'Irregular file'
        return 1
    fi 
    if [ ! -r "$1" ]; then 
        echo 'Unreadable file'
        return 2 
    fi
    return 0
}
$ checktype /dev/stdin ; echo $?
Irregular file
1

또한 test표준(내장) 유틸리티이므로 별칭이나 함수에 대한 잘못된 이름입니다.


나는 별칭이 좋지 않은 선택이라는 것을 알고 있지만 현재 교수는 별칭을 요구합니다.

음, 몇 가지 사항이 바뀌었습니다. 내 제안은 교수에게 더 적합한 솔루션을 보여주고 간단한 솔루션이 작동하지 않는 이유를 설명하는 것입니다.

하지만 이것이 작동하지 않고 실제로 당신이~ 해야 하다별칭을 사용하면 반환 값은 실제로 실행된 마지막 명령의 반환 값일 뿐이라는 점을 고려하세요. 원하는 값을 반환하려면 무언가를 조작할 수 있어야 합니다.

(숙제였다면 바로 풀 솔루션을 주는 것은 공평하지 않을 것 같습니다. 이하 스포일러가 있습니다.)

팁: 임의의 값을 반환하는 명령을 이미 사용했습니다.

답변3

alias여기서는 잘못된 선택입니다. 이 줄을 bash 스크립트 파일에 넣으세요.

#!/bin/bash
if [ ! -f filename ];
 then echo 'Irregular file'; exit 1 ;
fi;
if [ ! -r filename ];
 then echo 'Unreadable file'; exit 2;
fi;

예상대로 작동합니다.

관련 정보