![如何以交互方式运行文件中的所有命令](https://linux22.com/image/184296/%E5%A6%82%E4%BD%95%E4%BB%A5%E4%BA%A4%E4%BA%92%E6%96%B9%E5%BC%8F%E8%BF%90%E8%A1%8C%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E5%91%BD%E4%BB%A4.png)
我有一个有一百多行的文本文件commands.txt
,每一行都是一个 shell 命令:
echo foo
...
echo bar
我想运行文件中的每一行,但我想在运行之前检查每一行。此外,有些行有通用代码,例如
ping <dest_host>
我需要为该命令写一个适当的单词。我正在尝试找到一种简单的方法来按顺序运行所有这些命令。像脚本一样运行它不是一个选项,并且复制粘贴每一行会有点乏味。
有任何想法吗?
答案1
carefully_run.sh
您可以使用以下内容命名脚本:
#!/usr/bin/bash
while IFS= read -r -u3 cmd
do
read -e -i "$cmd" -p "$USER $ " cmd
eval "$cmd"
done 3<$1
然后你只需要运行
carefully_run.sh commands.txt
对于其中的每一行,commands.txt
都会向您显示一个提示,其中包含已写入的行内容。然后你将有机会根据需要检查和修改它,当你按 Enter 时,它将运行该命令。然后它会向您展示下一个。
笔记:
如果commands.txt
包含像这样的行
foo=bar
foo
运行命令时,的值将被保留commands.txt
,但在最后一个命令之后它将丢失。如果您需要保留它,并且您碰巧正在运行bash
,则可以通过运行来实现
source carefully_run.sh commands.txt
代替
./carefully_run.sh commands.txt