zsh에서 파일의 모든 명령을 대화식으로 실행하는 방법은 무엇입니까?

zsh에서 파일의 모든 명령을 대화식으로 실행하는 방법은 무엇입니까?

내가 우연히 만났어이 문제. 파일의 모든 명령을 대화식으로 실행하는 방법이 필요합니다.

bash다음과 같은 스크립트를 사용하는 것이 좋습니다 .

#!/usr/bin/bash                                                                
                                                                               
while IFS= read -r -u3 cmd
do
    read -e -i "$cmd" -p "$USER $ " cmd
    eval $cmd
done 3<$1

zsh다음을 사용하여 동일한 효과를 얻을 수 source있는지 궁금합니다.

답변1

run_carefully() {
  # Take the first arg as a file name, read the file and split it on newlines.
  local cmd; for cmd in ${(f)"$(<$1)"}; do
    # Let the user edit (or delete) the command, before evaluating it.
    vared cmd
    eval "$cmd"
  done
}

또는 사용자가 전체 명령 목록을 한 번에 실행하기 전에 편집하도록 할 수 있습니다.

run_all_carefully() {
  # Take the first arg as a file name and read the file.
  local list="$(<$1)"

  # Let the user edit the list of commands, before evaluating it.
  vared list
  eval "$list"
}

두 경우 모두 Enter전체 편집 내용이 승인되고 AltEnter편집기를 종료하지 않고도 줄 바꿈이 삽입됩니다. 두 번째 경우에는 모든 명령이 한 번에 편집되므로 -M두 명령이 교체되는 고유한 키맵(옵션을 통해 vared 로 전달됨)을 설정해야 할 수도 있습니다 .

문서:

관련 정보