Script interativo mais simples para pesquisar dentro de um log
#!/bin/bash
# Starting - sh /tmp/czr.sh
printf "1 - Option 1\n2 - Option 2\n";
read -r select
if [ $select = "1" ] ; then
echo "Option 1 do nothing" ;
fi
if [ $select = "2" ] ; then
echo -n "Type what to find: "
read -r typed
cat /var/log/httpd/maps_error_log | grep -i "$typed" --color
fi
exit
sh
Quero começar aquele com a opção 2 predefinida como
echo "2" | sh /tmp/czr.sh
Mas o comando não dá a opção de digitar o que quero encontrar - ele apenas abre um arquivo de log inteiro.
(como se echo "2" passasse não apenas a escolha de "2 - Opção 2", mas também um comando "Enter").
É possível iniciar o bash acima com a opção 2 pré-selecionada e ainda permitir que eu digite o que quero encontrar (economizando interatividade)?
Como ambos
read
os comandos normalmente usam o mesmo descritor de arquivostdin
, o primeiroread
consumirá a entrada do fluxo de entrada padrão. Para evitar que o segundoread
bloqueie ou falhe quandostdin
estiver vazio, você deve redirecioná-lo pararead
uma fonte alternativa, como/dev/tty
(o teclado do terminal), que permanece disponível mesmo quandostdin
canalizado.A propósito, o pipe
cat
e o|
comando não são necessários, apenasgrep
o arquivo de log diretamente.Peça ao usuário a resposta para a segunda pergunta e envie-a também para o script.