是否可以将命令写入文本文件,然后将其作为文件加载到终端中?如果是的话,加载文件的命令是怎样的?谢谢。
例如文件命令:
awk -f program.awk d01.active > out1
awk -f program.awk d02.active > out2
这是因为运行 awk 程序时出现问题,该程序无法使用命令
awk -f program.awk d??.active > out
我需要对大量文件使用 program.awk ,当我无法使用 ?? 修复该命令的程序时,这对我来说似乎是更简单的解决方案。
答案1
如果您有一个包含 shell 命令列表的文件(每行一个),那么您就有了一个 shell 脚本!您需要做的就是运行它:
sh file_commands
然而,这并不是我认为您需要的最简单的方法。如果你想运行当前目录中的program.awk
每个文件,你可以简单地使用一个循环:d??.active
for file in d??.active; do awk -f program.awk "$file" > "$file".out; done
这将为 创建一个d01.active.out
输出文件d01.active
,为 创建一个d02.active.out
文件,d02.active
等等。
答案2
shell 脚本本质上是由行分隔符终止的命令列表,这些命令将被指定(或默认)解释器解释为命令列表。
要指定解释器,您的文件应以哈希邦(也称为 shebang)。
例子:
#!/bin/sh
#!/bin/bash
#!/bin/ksh
#!/bin/zsh
#!/usr/bin/env bash
注意:每个解释器都有自己的语法和规则集。无论您打算使用哪一种产品,您都应该研究其手册。
在你的 hashbang 之后,你基本上可以开始列出要在各自的行上执行的命令。
注意:这些命令会按照从上到下的顺序执行
在你的例子中你会想要这样的东西:
#!/bin/sh
awk -f program.awk d01.active > out1
awk -f program.awk d02.active > out2
然后,您必须使该文件可执行,并通过在命令行上指定该文件的完整路径或相对路径来运行它。 (或通过运行sh /path/to/file
)
不过,这看起来确实是一个潜在的 xy 问题,并且可能可以通过更编程的方式来处理。
例如:
#!/bin/bash
for file in d??.active; do
n=${file:1:2}
awk -f program.awk "$file" > "out$n"
done