Para arquivo, sugiro um formato como:
please open google|open http:www.google.com
Aqui a resposta é tudo antes da barra vertical. Seu var1
é tudo depois da barra vertical. (Se você tivesse mais vars para colocar nessa linha, separe-os com mais barras verticais.)
Quanto ao script, aqui está um começo:
#!/bin/sh
read -p "what are we looking for? " response
action="$(awk -F\| -v r="$response" '$1==r{print $2;exit}' file)"
eval "$action"
O comando read obtém a entrada. (É uma boa prática usar letras minúsculas para as variáveis do shell para que você não sobrescreva acidentalmente algo importante.)
A linha com awk
extrai a ação da primeira linha no arquivo que começa com response|
. Ele assume que tudo após essa primeira barra vertical é o seu comando.
A última linha acima executa action
. Isso é feito com eval
. O uso de eval
requer algum nível de confiança. Ao refinar seu design, você deve eliminar o uso de eval
.
Usando um separador de campo diferente
Se usarmos @
no lugar de |
para o separador de campo, então file
teria linhas como:
please open google@open http:www.google.com
O código precisa de uma única alteração:
read -p "what are we looking for? " response
action="$(awk -F@ -v r="$response" '$1==r{print $2;exit}' file)"
eval "$action"