ksh 스크립트 내의 인수와 함께 마지막으로 실행된 명령을 가져오는 방법이 있습니까? Cygwin에서 mksh를 사용하고 있습니다.
시도했지만 fc -nl -1
스크립트에서 ""fc: 기록 기능을 사용할 수 없습니다" 오류가 발생합니다.
BASH_COMMAND
ksh에는 해당 변수가 표시되지 않습니다 .
다음은 스크립트에서 발췌한 내용입니다.
function trapper ()
{
printf "culprit: "
fc -nl -1
}
trap trapper ERR
grep -ic textdoesntexist test3
grep이 1을 반환하면 트랩퍼가 실행되지만 fc: History function not available 오류가 발생합니다.
처럼이씨가 지적한, hist
유용할 수도 있지만,ksh93에서만 사용 가능, 사용이 허용되지 않습니다.
명령줄 문자열을 변수에 저장하고 트랩퍼 함수 내에서 해당 변수를 사용해 보았습니다.
function err_handler
{
echo "ERR in ${cmd} trapped"
cmd=
return 0
}
trap err_handler EXIT ERR
cmd="grep -ic testdoesntexist test3"
${cmd} &>/dev/null
작동하지만 좀 추악하다고 생각합니다. 더 좋은 탈출구가 있나요?
답변1
mksh
작성자는 여기 ☻
fc
내장 유틸리티는 대화형 명령줄 기록에 액세스합니다 . 이미 이름에서 짐작할 수 있듯이 스크립트에서는 다르게 구문 분석되므로(훨씬 더 효율적으로) 이 기능을 사용할 수 없습니다.
일반적으로 스크립트에서는 다음을 수행할 수 있습니다.언제나어쨌든 마지막 줄을 알아두세요 ;)
대화형 셸의 기록에 액세스해야 하는 경우 별칭을 정의하거나 가급적이면 .profile
또는 에서 함수를 정의하세요 .mkshrc
.
특정 경우에는 다음과 같은 명시적인 오류 처리를 사용하는 것이 좋습니다.
grep -ic textdoesntexist test3 || die 'Could not grep in test3'
그리고제발 정말&>
리디렉션 연산자로 사용하는 GNU bash 호환성 관용구를 사용하지 마십시오 . 새로운 스크립트가 아닌 호환성을 위해서만 존재하며 -o posix
이미 모드에서는 사라집니다. 이를 구문 분석하면 기존의 유효한 POSIX 스크립트가 손상될 수 있습니다.