zshでファイル内のすべてのコマンドを対話的に実行するには?

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かどうか疑問に思います。

ベストアンサー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に渡される)を設定する必要があります。

文書:

おすすめ記事