저는 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;
예상대로 작동합니다.