[英]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.