Simplest interactive script to search inside a 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
I want to start the one with predefined option 2 like
echo "2" | sh /tmp/czr.sh
But such the command does not give an option to type what I want to find - it just opens a whole log file.
(as if echo "2" pass not only choice of "2 - Option 2" but also an "Enter" command).
Is it possible to start the bash above with preselected choice 2 but still allow to type what I want to find (saving interactivity)?
But such the command does not give an option to type what I want to find - it just opens a whole log file.
Since both read
commands normally use the same file descriptor stdin
, the first read
will consume input from the standard input stream. To avoid the second read
from blocking or failing when stdin
is empty, you should redirect it to read
from an alternative source, such as /dev/tty
(the terminal keyboard), which remains available even when stdin
is piped.
read -r typed </dev/tty
On a side note, the cat
and the |
pipe is not needed, just grep
the log file directly.
grep -i "$typed" /var/log/httpd/maps_error_log --color