로그 보고서의 명령 대체를 통해 실행된 명령을 검색하는 방법

로그 보고서의 명령 대체를 통해 실행된 명령을 검색하는 방법

작업을 단순하게 유지하려면 다음을 고려하세요.

x=$(java --version)
echo "x: $x"

예상대로 작동합니다.

x: openjdk version "11.0.13" 2021-10-19
OpenJDK Runtime Environment Temurin-11.0.13+8 (build 11.0.13+8)
OpenJDK Client VM Temurin-11.0.13+8 (build 11.0.13+8, mixed mode)

나에게 필요한 것은 다음과 같습니다.

x=$(java --version)
echo "x: $x"
echo "The '???' command was executed"

그래서 출력은 다음과 같아야합니다

x: openjdk version "11.0.13" 2021-10-19
OpenJDK Runtime Environment Temurin-11.0.13+8 (build 11.0.13+8)
OpenJDK Client VM Temurin-11.0.13+8 (build 11.0.13+8, mixed mode)
The 'java -version' command was executed

대신에 무엇을 사용할 수 있나요 ????

조사를 해서 알아냈지만 set +x/-x여기에 100% 적용되지는 않습니다.

답변1

확실하지 않은 이유는 스크립트에서 방금 실행된 명령이 무엇인지 알 수 없기 때문입니다. 그러나 단지 재미를 위해:

exec 2>tmpfile; set -x
x=$(java --version)
set +x; exec 2>&1
awk  'sub(/^\+\+\+/, "") {print "The \"" $0 "\" command was executed."} ' tmpfile
The " java --version" command was executed.

awk명령은 (xtrace) 옵션에 의해 도입된 문자 $PS4(이 경우 RE 메타 문자) 를 제거한 -x다음 필요한 줄을 인쇄합니다. 나중에 tmpfile을 삭제해야 합니다.

답변2

대화형 셸에서 기록 확장이 활성화되면 다음을 수행할 수 있습니다.

$ java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)
$ command="!!"
$ echo "$command"
java -version

답변3

@Arkadiusz Drabczyk가 말했듯 !!이 이것이 실행된 마지막 명령입니다.

다음 과 같이 이 기술을 사용하는 다른 흥미로운 방법이 있습니다 man bash.

!-n은 현재 명령줄에서 n을 뺀 값을 나타냅니다.

그래서 : !-2그것이 당신이 원하는 것입니다.

단점은 이것이 대화형 쉘에서만 작동한다는 것입니다.

스크립트에서 이 동작을 활성화하려면 bash다음 옵션을 사용하여 지정해야 합니다.

#!/bin/bash
set -H
set -o history
x=$(gcc -v 2>&1) # Sorry i dont like Java
echo "x is $x"
echo "Last cmd is " !-2 2>&1 >/dev/null

또는 history스크립트 내에서 활성화하고 출력을 구문 분석할 수 있습니다.

#!/bin/bash
set -o history
x=$(gcc -v 2>&1)
echo "x is $x"
last_cmd=$(history | sed -n '1s/^ * *//p')
echo "The cmd executed is $last_cmd"

이 섹션에서는 ... | sed ...명령에서 사용되는 형식을 잘라냅니다 history. 내 시스템에서는 history다음과 같이 인쇄됩니다.

  2142  ./test2.sh 
  2143  cat test2.sh 
  2144  history 

다른 시스템에서는 날짜와 시간도 인쇄할 수 있습니다.


이를 수행하는 방법에 대한 흥미로운 정보를 확인하십시오.스크립트에서 기록 활성화그리고스크립트 내 히스토리 확장

관련 정보