开发者

exec line from file in bash

开发者 https://www.devze.com 2023-01-14 10:47 出处:网络
I\'m trying to read commands from a text file and execute each line from a bash script. #!/bin/bash while read line;do

I'm trying to read commands from a text file and execute each line from a bash script.

#!/bin/bash
while read line;    do 
     $line
done <开发者_如何学JAVA; "commands.txt"

In some cases, if $line contains commands that are meant to run in background, eg command 2>&1 & they will not start in background, and will run in the current script context.

Any ideea why?


if all your commands are inside "commands.txt", essentially, you can call it a shell script. That's why you can either source it, or run it like normal, ie chmod u+x , then you can execute it using sh commands.txt


I don't have anything to add to ghostdog74's answer about the right way to do this, but I can cover why it's failing: The shell parses I/O redirections, backgrounding, and a bunch of other things before it does variable expansion, so by the time $line is replaced by command 2>&1 & it's too late to recognize 2>&1 and & as anything other than parameters to command.

You could improve this by using eval "$line" but even there you'll run into problems with multiline commands (e.g. while loops, if blocks, etc). The source and sh approaches don't have this problem.

0

精彩评论

暂无评论...
验证码 换一张
取 消