bash 스크립트 내에서 실행 된 마지막 명령을 에코하려고합니다. history,tail,head,sed
명령이 파서 관점에서 스크립트의 특정 줄을 나타낼 때 잘 작동 하는 일부 작업 을 수행하는 방법을 찾았습니다 . 그러나 어떤 상황에서는 명령이 case
명령문 안에 삽입되는 경우와 같이 예상되는 출력을 얻지 못합니다 .
스크립트 :
#!/bin/bash
set -o history
date
last=$(echo `history |tail -n2 |head -n1` | sed 's/[0-9]* //')
echo "last command is [$last]"
case "1" in
"1")
date
last=$(echo `history |tail -n2 |head -n1` | sed 's/[0-9]* //')
echo "last command is [$last]"
;;
esac
출력 :
Tue May 24 12:36:04 CEST 2011
last command is [date]
Tue May 24 12:36:04 CEST 2011
last command is [echo "last command is [$last]"]
[Q] 누군가가 bash 스크립트 내에서이 명령이 호출되는 방법 / 어디에 관계없이 마지막 실행 명령을 에코하는 방법을 찾도록 도와 줄 수 있습니까?
내 대답
내 동료 SO'ers에서 많이 감사 기여에도 불구하고, 나는 쓰기를 선택했다 run
하나의 명령으로 모든 매개 변수를 실행하고 명령과 그 실패의 오류 코드를 표시 - - 기능 다음과 같은 혜택을 :
에 -I에만 필요 run
한 줄에 유지하고 스크립트의 간결성에 영향을주지 않는 확인하려는 명령 앞에 추가-
스크립트가 이러한 명령 중 하나에서 실패 할 때마다 스크립트의 마지막 출력 줄은 어떤 명령을 명확하게 표시하는 메시지입니다. 종료 코드와 함께 실패하므로 디버깅이 더 쉬워집니다.
예제 스크립트 :
#!/bin/bash
die() { echo >&2 -e "\nERROR: $@\n"; exit 1; }
run() { "$@"; code=$?; [ $code -ne 0 ] && die "command [$*] failed with error code $code"; }
case "1" in
"1")
run ls /opt
run ls /wrong-dir
;;
esac
출력 :
$ ./test.sh
apacheds google iptables
ls: cannot access /wrong-dir: No such file or directory
ERROR: command [ls /wrong-dir] failed with error code 2
여러 인수, bash 변수를 인수로, 따옴표로 묶은 인수로 다양한 명령을 테스트 run
했는데 함수가이를 깨뜨리지 않았습니다. 지금까지 찾은 유일한 문제는 깨지는 에코를 실행하는 것이지만 어쨌든 에코를 확인할 계획은 없습니다.
run()
따옴표를 사용하면 제대로 작동하지 않습니다run ssh-keygen -t rsa -C info@example.org -f ./id_rsa -N ""
. 예를 들어 실패합니다 .