如何使用Bash从文件运行命令?

时间:2017-01-28 01:12:46

标签: linux bash file command

我想编写Bash脚本,允许我从文本文件中运行命令。

在文件中将是特殊字:" secretcommand"和下一行中的正确命令。

文本文件示例:

这是

secretcommand

PWD

的bash

脚本

现在我想在我的脚本中找到一个" secretcommand"。我想使用grep -n所以我可以得到这个单词的行,然后以某种方式将+ 1添加到该行,这样我得到下一行的数字,其中是正确的命令。最后我想运行这个命令。我想使用sed -f但它没有工作或我做错了。

你能帮我吗?

3 个答案:

答案 0 :(得分:0)

您可以尝试使用awk来回显正确的命令,然后执行它,如下所示:

awk '/secretword/ { flag = "1" } { if(flag == "1" && $1 != "secretword") { print $1; exit 0 } }' <file | bash -

答案 1 :(得分:0)

此脚本将采用一个参数,即文本文件的路径:

#!/bin/bash
while read -r line
do
  [[ "$line" =~ ^secretcommand$ ]] || continue
  read -r cmd || break
  eval "$cmd"
  break
done<"$1"

它要求整行完全匹配secretcommand,没有额外的间距(这可以通过改变双括号[[ ]]之间的正则表达式匹配来修改。

请注意使用&#34; eval&#34;从安全角度来看,任意数据通常不是一个好主意,但鉴于您的目的正是从数据文件中执行代码,我假设您了解风险。

答案 2 :(得分:0)

此脚本将带有secret命令的文件作为命令行参数。

#!/bin/bash

words=`cat $1`
found=0
command=''
for word in ${words[@]};
do
   if [ $word = 'secretcommand' ]; then
      found=1
   elif [ $found -eq 1 ]; then
      found=0
      command=$word
   fi
done
if [ $command != '' ]; then
   $command  # run the found command
fi