私は偶然会ったこの問題。ファイル内のすべてのコマンドを対話的に実行する方法が必要です。
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エディタを終了せずに改行が挿入されます。 2番目のケースでは、すべてのコマンドが一度に編集されるため、2つのコマンドが置き換えられる-M
固有のキーマップ(オプションを介してvaredに渡される)を設定する必要があります。
文書:
- コマンドの置き換え(
$(<foo)
) - パラメータ拡張フラグ(
${(f)"$(foo)"}
) - 組み込みコマンド
vared