2014-03-19 122 views
0

当我尝试从文件读取一些行并逐个执行它们时,我遇到了bash shell脚本中的问题。当该行有空格参数时会发生此问题。代码:从bash中的文件读取并执行带有空格的行

while read i 
do 
    $i 
done < /usr/bin/tasks 

任务文件:

mkdir Hello\ World 
mkdir "Test Directory" 

上述两个指令很好地工作,当从终端,仅创建两个目录名为“Hello World”的分别“测试指南”直接执行,但当从脚本读取并执行指令时不会发生同样的情况,这意味着创建了四个目录。尽管如此,我想保持我的代码尽可能简单,如果可能的话,我宁愿不使用cat命令。预先感谢您的帮助。

+1

这里你真正的目标是什么?如果您想添加日志记录,错误处理等,那么有更好的方法来完成它。 –

+0

http://mywiki.wooledge.org/BashFAQ/050 – tripleee

回答

3

尽可能简单?您正在重新实现.(或source,作为bash让你拼写)命令:

. /usr/bin/tasks 

source /usr/bin/tasks 

要一次执行一条线,使用eval

while IFS= read -r i; do 
    eval "$i" 
done 

这假定该文件的每一行包含一个可以单独执行的一个或多个完整命令。

+0

代码编辑。无论如何,任何想法如何解决与空间问题? – user3437174

+0

空间不应该有问题。如果在命令行中键入'/ usr/bin/tasks'中的命令时,它们应该可以工作,只需简单地输入文件即可。 – chepner

+0

简单地采购文件工作得很好,但我真的需要使用while循环来从文件任务中一次执行一行(如果以前我没有提到,很抱歉)。那可能吗? – user3437174