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

Posted

技术标签:

【中文标题】在 Bash 中将文本文件作为命令运行【英文标题】:Run text file as commands in Bash 【发布时间】:2012-04-07 04:53:52 【问题描述】:

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

example.txt:

sudo command 1
sudo command 2
sudo command 3

【问题讨论】:

脚本是文本文件,文本文件脚本。 我不喜欢有人把书扔给偷看,放手吧.. 【参考方案1】:

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

./scriptname.sh

写一个bash脚本很简单

样机 sh 文件:

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

【讨论】:

在 linux 中扩展不是强制性的(你甚至可以创建一个没有扩展的文件)。即使扩展名是 .txt 也可以使用 是的,但是你应该在你的文件的头部有这个“#!/bin/sh”,这样内核就知道它是一个shell脚本 你没有!需要编辑文件,也不需要文件顶部的#!/bin/sh!你只需要做kclair sez 要做的事情:sh your_file_here_and_it_can_have_any_random_filename 您不必更改扩展名,也不必在顶部添加shebang。如果你让它可执行chmod +x example.txt,shell 会执行一个命令,相当于调用一个 shell,路径名作为它的第一个操作数。【参考方案2】:

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

bash example.txt

sh example.txt

【讨论】:

也可以使用 bash -x example.txt 进行调试【参考方案3】:

执行

. example.txt

这完全符合您的要求,无需在文件上设置可执行标志或运行额外的 bash 实例。

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

【讨论】:

美观又简单。【参考方案4】:

你可以这样使用:

for i in `cat foo.txt`
do
    sudo $i
done

尽管如果命令有参数(即行中有空格),您可能需要稍微调整一下以保护空格,以便sudo 将整个字符串视为命令。但它可以让您了解如何开始。

【讨论】:

如果foo.txt 在任何一行包含多个标记,这是一个糟糕的建议。如果脚本中的每个命令确实需要sudo,那么使用sudo -s <foo.txt 会好得多。另见mywiki.wooledge.org/DontReadLinesWithFor【参考方案5】:
cat /path/* | bash

cat commands.txt | bash

【讨论】:

不需要额外的过程,如果你想为bash提供输入使用重定向

以上是关于在 Bash 中将文本文件作为命令运行的主要内容,如果未能解决你的问题,请参考以下文章

在bash中将文本附加到具有模式匹配名称的文件[重复]

sh 如何在shell脚本/ bash中将输出附加到文本文件的末尾?

在BASH中将日期作为STDIN传递给ruby函数[关闭]

如何编写文本文件,然后在同一个 Bash 脚本中读取它?

在 Bash 脚本中将字符串作为命令运行

Bash的常见特性及文本查看命令实战