来自bash文件的exec行

时间:2010-08-28 01:08:33

标签: bash

我正在尝试从文本文件中读取命令并从bash脚本执行每一行。

#!/bin/bash
while read line;    do 
     $line
done < "commands.txt"

在某些情况下,如果$line包含要在后台运行的命令,例如command 2>&1 &,它们将无法在后台启动,并将在当前脚本上下文中运行。

任何想法为什么?

2 个答案:

答案 0 :(得分:11)

如果您的所有命令都在“commands.txt”中,那么基本上,您可以将其称为shell脚本。这就是为什么你可以采购它,或者像普通的那样运行它,即chmod u + x,然后你可以使用sh commands.txt执行它

答案 1 :(得分:3)

我没有任何内容可以添加到ghostdog74关于正确方法的答案,但我可以解释为什么它失败:shell在它变量之前解析I / O重定向,后台处理和一堆其他的东西扩展,所以当$line替换为command 2>&1 &时,将2>&1&识别为除command的参数以外的任何内容为时已晚。

您可以使用eval "$line"来改善这一点,但即使在那里,您也会遇到多行命令的问题(例如while循环,如果是块等)。 sourcesh方法没有此问题。