내가 우연히 만났어이 문제. 파일의 모든 명령을 대화식으로 실행하는 방법이 필요합니다.
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 로 전달됨)을 설정해야 할 수도 있습니다 .
문서:
- 명령 대체(
$(<foo)
) - 매개변수 확장 플래그(
${(f)"$(foo)"}
) - 내장 명령
vared