【问题标题】:How to run command from file using Bash?如何使用 Bash 从文件运行命令?
【发布时间】:2017-06-13 19:28:06
【问题描述】:

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

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

文本文件示例:

这是

我的

秘密命令

密码

重击

脚本

现在我想在我的脚本中找到一个“秘密命令”。我想使用 grep -n 所以我可以得到这个单词的行,然后以某种方式将 + 1 添加到该行,这样我就得到了正确命令的下一行的编号。最后我想运行这个命令。我想使用 sed -f 但它不起作用或者我做错了什么。

你能帮帮我吗?

【问题讨论】:

标签: linux bash file command


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      #!/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
      

      【讨论】:

        猜你喜欢
        • 2012-11-14
        • 1970-01-01
        • 2019-01-09
        • 2013-02-04
        • 1970-01-01
        • 2014-07-31
        • 1970-01-01
        • 2016-05-13
        • 2015-08-13
        相关资源
        最近更新 更多