ksh에서 마지막으로 실행된 명령줄 가져오기

ksh에서 마지막으로 실행된 명령줄 가져오기

ksh 스크립트 내의 인수와 함께 마지막으로 실행된 명령을 가져오는 방법이 있습니까? Cygwin에서 mksh를 사용하고 있습니다.

시도했지만 fc -nl -1스크립트에서 ""fc: 기록 기능을 사용할 수 없습니다" 오류가 발생합니다.

BASH_COMMANDksh에는 해당 변수가 표시되지 않습니다 .

다음은 스크립트에서 발췌한 내용입니다.

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

관련 정보