모든 명령에 대한 확인 메시지 표시

모든 명령에 대한 확인 메시지 표시

저는 어떤 일을 위해 아주 임시적인 설치 스크립트를 작성하고 있습니다. 제어 구성은 많지 않으며 기본적으로 명령 목록만 있습니다. 각 명령을 실행하기 전에 사용자가 확인하고 싶습니다. 모든 명령에 쉘 함수 이름을 붙이지 않고 bash에서 그렇게 할 수 있는 방법이 있나요?

답변1

다음을 사용할 수 있습니다 extdebug.

shopt -s extdebug
trap '
  IFS= read -rn1 -d '' -p "run \"$BASH_COMMAND\"? " answer <> /dev/tty 1>&0
  echo > /dev/tty
  [[ $answer = [yY] ]]' DEBUG

cmd1
cmd2
...

참고로 zsh이에 상응하는 내용은 다음과 같습니다.

TRAPDEBUG() {
  read -q "?run \"$ZSH_DEBUG_CMD\"? " || setopt errexit
  echo > /dev/tty
}
cmd1
cmd2
...

더 휴대하기 좋게:

run() {
  printf '%s ' "run $@?" > /dev/tty
  IFS= read -r answer < /dev/tty
  case $answer in
    [yY]*) "$@";;
  esac
}
run cmd1
run cmd2
run cmd3 > file

에서는 이라고 말해도 잘 run cmd3 > file립니다 . 따라서 다음과 같이 작성하고 싶을 수도 있습니다.filen

run eval 'cmd3 > file'

eval또는 다음과 같이 함수 로 이동합니다 run.

run() {
  printf '%s ' "run $@?" > /dev/tty
  IFS= read -r answer < /dev/tty
  case $answer in
    [yY]*) eval "$@";;
  esac
}
run cmd1
run 'cmd2 "$var"'
run 'cmd3 > file'

또 다른 휴대용 제품이지만 더 많은 제한 사항이 있습니다.

xargs -pL1 env << 'EOF'
cmd1 "some arg"
cmd2 'other arg' arg\ 2
ENV_VAR=value cmd3
EOF

명령(에 있는 명령 $PATH)에 대해서만 작동하며 인수는 리터럴 문자열(변수나 쉘 구조는 없지만 xargs는 자체 인용 형식을 이해하지만)만 가능하며 리디렉션, 파이프 등을 가질 수 없습니다.

관련 정보