Subshell Web Service

2014-12-27

Das folgende Bash-Skript antwortet auf einen HTTP-Request mit der aktuellen Uhrzeit.

Beim Start des Skripts werden 2 Prozesse gestartet:

  1. nc horcht auf Port 8080 auf einen HTTP-Request und leitet diesen an die named Pipe weiter.
  2. Der zweite Prozess liest von der named Pipe und leitet mitsamt HTTP Return Code die aktuelle Zeit an nc weiter.

Die named Pipe in Kombination mit der Subshell des 2. Prozesses ist der Kniff des Skripts damit auch die aktuelle Zeit über nc als HTTP-Response zurück geliefert wird.

#!/bin/bash

if [ ! -p pipe ]; then
    mkfifo pipe
fi

while true; do 
    { 
       read line < pipe        
       echo -e "HTTP/1.1 200 OK\r\n"        
       echo $(date)     
     }  | nc -l 8080 > pipe
done

Eine brauchbare Erklärung zur Subshell ist auf Stackexchange zu finden.