2017-01-28 2 views
0

Я хочу написать сценарий Bash, который позволит мне запускать команды из текстового файла.Как запустить команду из файла с помощью Bash?

В файле будет специальное слово: «secretcommand» и соответствующая команда в следующей строке.

Пример текстового файла:

Это

мой

secretcommand

PWD

Баш

сценарий

Теперь я хочу в моем сценарии, чтобы найти "secretcommand". Я хотел использовать grep -n, чтобы получить строку этого слова, а затем добавить + 1 к этой строке, чтобы получить следующую строку, где правильная команда. И, наконец, я хочу запустить эту команду. Я хотел использовать sed -f, но это не работало, или я делаю что-то неправильно.

Помогите мне пожалуйста?

+0

пытаются увидеть эту тему [http://stackoverflow.com/questions/27968451/display-exact-output-of-unix-command-from-bash-script](http://stackoverflow.com/questions/27968451/display-exact-output-of-unix-command-from-bash-script) , если это касается того, что вы пытаетесь сделать – aston

ответ

0

Этот скрипт будет принимать один аргумент, путь для текстового файла:

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

Требуется, чтобы вся строка соответствовала точно секретной команде без дополнительного интервала (это можно изменить, изменив регулярное выражение, совпадающее между двойными скобками [[ ]].

Обратите внимание, что использование «eval» для произвольных данных, как правило, не является хорошей идеей с точки зрения безопасности, но, учитывая вашу цель - именно выполнить код из файлов данных, я предполагаю, что вы понимаете риски.

0

Вы можете попробовать использовать AWK повторить правильную команду, а затем выполнить его, что-то вроде этого:

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

Этот сценарий принимает файл с секретной командой в качестве аргумента командной строки.

#!/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 
Смежные вопросы