繁体   English   中英

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

[英]How to run command from file using Bash?

我想写Bash脚本,女巫将允许我从文本文件运行命令。

在文件中将使用特殊词:“ secretcommand”和下一行中的正确命令。

文本文件示例:

这是

我的

秘密命令

密码

重击

脚本

现在,我想在脚本中找到“ secretcommand”。 我想使用grep -n以便获得该单词的行,然后以某种方式在该行中加上+1,以便获得下一行的编号,这是正确的命令。 最后,我想运行此命令。 我想使用sed -f,但是没有用,或者我做错了。

你能帮我吗?

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

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

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

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

它要求整行要完全匹配secret命令,并且没有多余的间隔(可以通过更改双括号[[ ]]之间的正则表达式匹配来修改此命令。

请注意,从安全角度来看,对任意数据使用“ eval”通常不是一个好主意,但是鉴于您的目的恰恰是从数据文件中执行代码,因此我认为您已了解风险。

该脚本将带有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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM