Bash

如何以互動方式執行 zsh 文件中的所有命令?

  • December 2, 2020

我遇到了這個問題。它要求一種方法來互動地執行文件中的所有命令。

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腳本,以便我可以保留文件中聲明的變數。

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都將接受整個編輯,而Alt``Enter在不退出編輯器的情況下插入換行符。對於第二種情況,一次編輯所有命令,您可能希望設置自己的鍵盤映射(通過-M選項傳遞給 vared),在其中交換這兩個。

文件:

引用自:https://unix.stackexchange.com/questions/622434