在Bash中将文本文件作为命令运行

Bla*_*ner 45 linux bash terminal ubuntu command

如果我有一个文本文件,每行都有一个单独的命令,我如何让终端作为命令运行每一行?我只是不想一次复制和粘贴1行.它不必是一个文本文件......它可以是任何类型的文件.

example.txt:

sudo command 1
sudo command 2
sudo command 3
Run Code Online (Sandbox Code Playgroud)

kcl*_*air 68

你也可以用shell运行它,例如:

bash example.txt

sh example.txt
Run Code Online (Sandbox Code Playgroud)

  • 也可以使用bash -x example.txt对其进行调试 (2认同)

Cha*_*aos 66

你可以使用这些命令创建一个shell脚本,然后chmod +x <scriptname.sh>,然后运行它

./scriptname.sh
Run Code Online (Sandbox Code Playgroud)

写一个bash脚本非常简单

样机sh文件:

#!/bin/sh
sudo command1
sudo command2 
.
.
.
sudo commandn
Run Code Online (Sandbox Code Playgroud)

  • 你不!需要编辑文件,也不需要文件顶部的#!/ bin / sh!您只需要执行`kclair` sez即可:`sh your_file_here_and_it_can_have_any_random_filename`。 (2认同)

Dav*_* L. 10

执行

. example.txt
Run Code Online (Sandbox Code Playgroud)

这恰好满足您的要求,而无需在文件上设置可执行标志或运行额外的bash实例。

有关详细说明,请参见例如https://unix.stackexchange.com/questions/43882/what-is-the-difference-between-sourcing-or-source-and-executing-a-file-i

  • 又好又简单。 (3认同)

Qua*_*nic 6

你可以使用这样的东西:

for i in `cat foo.txt`
do
    sudo $i
done
Run Code Online (Sandbox Code Playgroud)

虽然如果命令有参数(即行中有空格),你可能不得不用一点点来保护空白,以便整个字符串被视为sudo一个命令.但它会让你了解如何开始.

  • 如果`foo.txt`在任何一行上包含多个令牌,这是一个糟糕的建议。如果确实需要为脚本中的每个命令使用sudo,那么使用sudo -s &lt;foo.txt会更好。另请参阅https://mywiki.wooledge.org/DontReadLinesWithFor (2认同)