bash:将脚本的输出作为脚本执行

标签 bash

我正在编写一个简单的脚本来生成给定长度(比如 10)的 a 和 b 的所有组合。我希望能够在命令行上执行此操作(我知道如果我将所有内容都放在 bash 脚本文件中并执行它,这将相当容易)。但是,我想知道是否可以不使用任何额外文件。这是我到目前为止所拥有的:

n=10;
for i in `seq 1 1 $n`; do
    echo "for a$i in {a..b}; do ";
done;
echo -n "echo ";
for i in `seq 1 1 $n`; do
    echo -n '$'"a$i"; done;
    echo;
for i in `seq 1 1 $n`; do
    echo "done;";
done

(为了便于阅读,我对代码进行了格式化,但实际上它们都在一行中从提示符运行)

这给了我以下输出:

for a1 in {a..b}; do 
for a2 in {a..b}; do 
for a3 in {a..b}; do 
for a4 in {a..b}; do 
for a5 in {a..b}; do 
for a6 in {a..b}; do 
for a7 in {a..b}; do 
for a8 in {a..b}; do 
for a9 in {a..b}; do 
for a10 in {a..b}; do 
echo $a1$a2$a3$a4$a5$a6$a7$a8$a9$a10
done;
done;
done;
done;
done;
done;
done;
done;
done;
done;

这很好。如果我复制它并将其粘贴回命令行,它会非常有效并为我提供结果。

问题是我如何只使用初始脚本来执行此操作,而无需复制粘贴,也无需将任何内容重定向到文件。

我试过在脚本周围添加 $( ),但这给了我“没有找到‘for’命令”,因为它不是真正的命令,而是内置的 bash。在此之前,我曾尝试将 eval 放在某个地方,但我不断收到更多错误。我有点卡住了,所以任何帮助将不胜感激。

(顺便说一句,重申一下,我这样做或多或少只是为了更多地学习 bash——这就是为什么我不想将输出重定向到一个文件然后执行该文件。我知道该怎么做那部分,但我不知道如何从命令行完成)

最佳答案

你需要使用一个 eval,$() 给你一个字符串。

eval $( echo echo foo )

另一种选择是插入子 shell 并将其通过管道传递给 bash:

(echo echo foo) | /bin/bash

关于bash:将脚本的输出作为脚本执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5017578/

相关文章:

linux - 错误 bash 提取匹配模式的第二列

bash - 通过 sed 的管道问题

linux - hive 脚本(hivequery.hql)文件中的这个符号是什么意思 "use ${word:word}"

bash - 如何防止 PowerShell 中出现这种无限循环?

linux - ASCII 文本浏览器与 ASCII 文本浏览器 curl

linux - 如果 read var 为空,则返回以在 bash 中再次提问

linux - 使用类似 Qt Creator 的环境运行脚本

bash - Bash/Shell 中并行处理的有效方法?

linux - 检查参数是否是 bash shell 中的有效日期

git - 如何在 Git bash 中更改 git 帐户?