
저는 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;
의도한 대로 작동할 것입니다.