我碰到这个问题。它要求一种以交互方式运行文件中所有命令的方法。
一个答案建议使用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插入换行符而不退出编辑器。对于第二种情况,所有命令都会立即编辑,您可能需要设置自己的键盘映射(通过选项传递给 vared -M
),在其中交换这两个命令。
文档: