Bash
如何以互動方式執行 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
腳本,以便我可以保留文件中聲明的變數。
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),在其中交換這兩個。文件: