2013-02-22 2 views
1

Я пытаюсь написать простой скрипт одного файла, который, как предполагается, чтобы сделать поиск Google и вывести заголовки первых пяти результатов:утилиты командной строки/Баш скрипты с состоянием

> lookup search "Stack Overflow" 
100 results 

1. Stack overflow 
www.stackoverflow.com 
(description) 

2. ... 

Тогда пользователь должен иметь возможность войти:

> lookup go 1 

и откроет командную строку в браузере пользователя выбора к первому результату.

Однако для этого требуется, чтобы сценарий «запоминал» результаты последней команды.

Каков наилучший способ для этого? Должен ли я сохранять результаты в качестве переменной окружения? (Если это так, это будет связано с использованием сценария вместо того, чтобы вызывать его в своей собственной подоболочке, что может быть связано с соглашениями о безопасности/небезопасными? Я не знаю, действительно). Должен ли я сохранять результаты во временном текстовом файле?

Подобная функциональность существует в geeknote, но реализована в python, и мне, возможно, придется в нее копаться, чтобы узнать, где она это делает; однако я даже не уверен, что решение будет применяться ко мне.

+0

Что вы будете делать, если откроете два терминала и выполните разные поиски в каждом? –

+0

@AdamBatkin Я бы оставил это поведение неопределенным, но было бы (незначительно) лучше, если поиск на одном терминале не повлиял бы на другой терминал. –

ответ

2

Вы можете использовать dot-файл для сохранения информации, так же как ваша оболочка может сохранять cmds в файле .history через логины.

Если вам удобно, чтобы данные были чистыми/безопасными для оценки, прежде чем записывать их в файл, вы можете настроить его, чтобы значения были легко доступны для источников в вашем скрипте. Если вы сохранили их в t.var, вы, вероятно, хотите ~/.yourprogram или сконвертировано

$ cat t.var 
A=yahoo.com 
B=google.com 

Вы можете прочитать их с помощью точки:.

$ cat ./s.sh 
#!/bin/bash 
. t.var 
echo ${A} 

И вуаля:

$ bash ./s.sh 
yahoo.com 

Вы бы просто нужно отображать имена в позиции.

#!/bin/bash 
. t.var 
case "$1" in 
1) 
    echo $A;; 
2) 
    echo $B;; 
esac 

Кажется, существует компромисс разбора данных по сравнению с простотой использования его возврата. Вышеизложенное является одним из способов.

Смежные вопросы