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

87
如果我有一个文本文件,每行都有一个命令,我该如何让终端运行每一行作为一个命令?我不想一次复制粘贴一行。这个文件不一定要是文本文件... 它可以是任何能够工作的文件。 example.txt
sudo command 1
sudo command 2
sudo command 3

2
脚本是一个文本文件,而文本文件就是一个脚本。 - tripleee
我不喜欢有人对别人施加压力,放手吧。 - rearThing
5个回答

108

您可以使用这些命令创建一个Shell脚本,然后chmod +x <脚本名.sh>,最后只需运行它即可。

./scriptname.sh

编写bash脚本非常简单

示例sh文件:

#!/bin/sh
sudo command1
sudo command2 
.
.
.
sudo commandn

在Linux中,扩展名不是必需的(你甚至可以创建一个没有扩展名的文件)。即使扩展名是.txt,也可以正常工作。 - Manlio
是的,但你应该在文件头部加上 "#!/bin/sh",这样内核就知道它是一个 shell 脚本。 - Chaos
2
你不需要编辑文件,也不需要在文件顶部添加 #!/bin/sh!你只需要按照 kclair 的指示执行以下命令:sh your_file_here_and_it_can_have_any_random_filename - aqn
您无需更改扩展名,也不需要在顶部添加shebang。如果您将其设置为可执行文件chmod +x example.txt,则shell会执行一个等效于使用路径名作为第一个操作数调用shell的命令。 - Diego Torres Milano

91
您也可以使用命令行来运行它,例如:
bash example.txt

sh example.txt

3
为了调试它,你可以使用bash -x example.txt。 - Kalpesh Soni

34

3
好的,简单明了。 - payne
太棒了!!! - user1953366

9
您可以使用类似以下代码的内容:
for i in `cat foo.txt`
do
    sudo $i
done

如果命令带有参数(即行中存在空格),您可能需要花点心思来保护空格,使整个字符串被sudo视为命令。但它可以让您了解如何入手。


4
如果foo.txt文件中的某一行包含多个标记,那么这是一个糟糕的建议。如果确实需要在脚本中的每个命令前使用sudo,则最好使用sudo -s <foo.txt。请参见https://mywiki.wooledge.org/DontReadLinesWithFor。 - tripleee

5
cat /path/* | bash

或者

cat commands.txt | bash

没有额外的过程,如果你想提供输入给 bash,请使用重定向。 - Diego Torres Milano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接