【问题标题】:How to execute commands read from the txt file using shell? [duplicate]如何使用 shell 执行从 txt 文件中读取的命令? [复制]
【发布时间】:2018-03-17 10:32:41
【问题描述】:

我试图执行从 txt 文件中读取的命令。但是在该脚本终止后,只有第一个命令正在执行。我的脚本文件名为 shellEx.sh 如下:

echo "pwd" > temp.txt
echo "ls" >> temp.txt
exec < temp.txt
while read line
do
exec $line
done
echo "printed"

如果我用 echo 代替 exec,它只会打印 pwd 和 ls。但是我想一一执行 pwd 和 ls 。

我得到的是:

$ bash shellEx.sh
/c/Users/Aditya Gudipati/Desktop

但是pwd之后,ls也需要替我执行。 任何人都可以为此提供更好的解决方案吗?

【问题讨论】:

  • “/c/Users/Aditya Gudipati/Desktop”是单一路径,您是否遇到空白问题,还是两个标记?
  • 你为什么要逐行读取文件,而不是直接使用. temp.txt获取文件?

标签: linux bash shell unix


【解决方案1】:

exec 在 bash 中的意思是在 Unix sense 中,它的意思是“停止运行这个程序并开始运行另一个程序”。这就是您的脚本退出的原因。

如果你想将 line 作为 shell 命令执行,你可以使用:

line="find . | wc -l"
eval "$line"

$line 本身不允许使用管道、引号、扩展或其他 shell 语法)

要执行包括多行命令在内的整个文件,请使用以下之一:

source ./myfile # keep variables, allow exiting script
bash myfile     # discard variables, limit exit to myfile

【讨论】:

    【解决方案2】:

    每行一个有效命令的文件本身就是一个 shell 脚本。只需使用. 命令在当前shell 中执行即可。

    $ echo "pwd" > temp.txt
    $ echo "ls" >> temp.txt
    $ . temp.txt
    

    【讨论】:

    • 感谢您的回复。它适用于我的场景
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 2012-12-22
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多