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

관련 정보