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 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 스크립트가 손상될 수 있습니다.