Сначала я думал, что Вы могли использовать регулярные выражения, но поскольку я читал документы MySQL , кажется, что Вы не можете. На вашем месте я использовал бы другой язык (такой как PHP) для генерации списка столбцов, Вы хотите получить, сохранить его как строку и затем использовать это для генерации SQL.
Возможно, вы могли бы использовать FIFO , чтобы вы могли захватить pid первого процесса, например:
FIFO=my_fifo
rm -f $FIFO
mkfifo $FIFO
tail -f $1 > $FIFO &
TAIL_PID=$!
cat $FIFO | nc -l -p 9977
kill $TAIL_PID
rm -f $FIFO
Наконец, мне удалось найти хвостовой процесс с помощью ps
. Благодаря идее ennuikiller.
Я использовал ps
, чтобы собрать хвост из аргументов и убить его. Это своего рода взлом, но он сработал. :)
Если вы найдете способ получше, поделитесь.
Вот полный сценарий:
(Последнюю версию можно найти здесь: http://docs.karamatli.com/dotfiles/bin/logserver )
if [ -z "$1" ]; then
echo Usage: $0 LOGFILE [PORT]
exit -1
fi
if [ -n "$2" ]; then
PORT=$2
else
PORT=9977
fi
TAIL_CMD="tail -f $1"
function kill_tail {
# find and kill the tail process that is detached from the current process
TAIL_PID=$(/bin/ps -eo pid,args | grep "$TAIL_CMD" | grep -v grep | awk '{ print $1 }')
kill $TAIL_PID
}
trap "kill_tail; exit 0" SIGINT SIGTERM
while true; do
( $TAIL_CMD & ) | nc -l -p $PORT -vvv
kill_tail
done
Один из способов - просто выполнить ps -ef и grep для tail с вашим скриптом ppid
Вы пробовали:
nc -l -p 9977 -c "tail -f $1"
(непроверено)
Или -e
с файлом сценария, если ваш nc
не имеет ] -c
. Возможно, вам понадобится nc
, который был скомпилирован с параметром GAPING_SECURITY_HOLE
. Да, вы должны сделать соответствующие выводы из названия этой опции.