Ich bin neu in der Shell-Programmierung und ich habe ein Skript erstellt, das eine Verbindung zu einem Server von mir öffnet. Ich möchte, dass dieses Skript auf eine Eingabe von einem Clientknoten wartet und diese verwendet, um eine Funktion auszuführen.Netcat-Daemon zum Aufrufen von Funktionen in SH-Skript
Dies ist mein Prozess. Run script> öffnet listener> auf dem zweiten Computer zu verwenden netcat Anschluss> eine Funktion im Skript auf dem Server namens nodefunction
Ich habe server_port zu '4444'
Dateinamen codiert laufen: run_hangman
nc -l -k -v -p 4444 | bash hangman
Dateiname: Henker
#!/bin/bash
msg_timeout=0
host_ows=1
server_port=4444
dubOws=xxx.xxx.xxx.xxx
initServer() {
hostIP=`ip -o addr show dev "eth0" | awk '$3 == "inet" {print $4}' | sed -r 's!/.*!!; s!.*\.!!'`
hostOws=`echo $hostIP | cut -d . -f 4`
}
servermsg(){ #message //if = --n, echos on same line
if [ "$1" != "--n" ]
then
echo `date +"%T"` "[SERVER] "$1
else
echo -n `date +"%T"` "[SERVER] "
fi
}
owsmsg(){ #message //if = --n, echos on same line
if [ "$1" != "--n" ]
then
echo `date +"%T"` "[OWS] "$1
else
echo -n `date +"%T"` "[OWS] "
fi
}
playermsg() {
if [ "$1" != "--n" ]
then
echo `date +"%T"` "[PLAYER] "$1
else
echo -n `date +"%T"` "[PLAYER] "
fi
}
question(){ #question, read, example
servermsg "$1"
if [ -n "$3" ]
then
servermsg "$3"
fi
read $2
echo ""
}
owsArray(){ #
for targetOws in $player_list
do
owsArray+=("OWS"$targetOws)
done
echo -n ${owsArray[*]}
echo
}
openSocket() {
servermsg "Starting the Game Listener"
servermsg "Opening Listener on port "$server_port
#nc -k -l $server_port |bash
#nc -kl -q 1 -p $server_port # This should create the listener & This is where everything stops.
servermsg "Now listening on port "$server_port
}
initServer
owsmsg "Starting server on OWS"$hostOws"..."
question "Enter all the OWSs that will play:" player_list "Example: 1 9 14 23"
echo $player_list
question "Type a category hint:" game_cat "Example: Type of Animal"
question "Type your word:" game_word "Example: zebra"
question "How many guesses:" game_guesses "Example: 7"
servermsg "OWS"$host_ows "has created a Hangman session"
servermsg "Players are:"; servermsg --n; owsArray
servermsg "Your word is "${#game_word}" letters long and players have "$game_guesses" guesses"
question "If this is all correct press enter, or CTRL+C to cancel"
openSocket
# I think I need a While script here to read the RAW input and run the playermsg function with the input?
ich betreiben die run_hangman Datei und dann über meinen Knoten Computer, um es mich verbinden. Ich gebe die folgende Zeile ein und gebe "1 2 3" aus, weil ich das brauche. Ich kann auch "1 2 3" nicht direkt in das Fenster eingeben, in dem "run_hangman" läuft, als würde ich Enter drücken, geht es in eine neue Zeile.
echo "1 2 3" >/dev/tcp/xxx.xxx.xxx.xxx/4444
Der Server zeigt, dass es
verbundenListening on [0.0.0.0] (family 0, port 4444)
14:52:24 [OWS] Starting server on OWS225...
14:52:24 [SERVER] Enter all the OWSs that will play:
14:52:24 [SERVER] Example: 1 9 14 23
Connection from [xxx.xxx.xxx.xxx] port 4444 [tcp/*] accepted (family 2, sport 41564)
Connection closed, listening again.
1 2 3
Nun, wenn es erlauben wird, openSocket wird es mir noch ein Echo zu schicken und dann schließt es auf dem Server. Ich muss bekommen, was ich nehme, ist eine while-Anweisung und habe es auf eine Eingabe wie "playermsg 'hat ein Spiel gestartet" und habe es tatsächlich diese Funktion auf dem Server ausführen.
Kann ich das zum Laufen bringen, scheint es fast, als müsste es im Hintergrund sein? Ich habe nc(1) als Referenz verwendet und einige Websites sagten -d
und das hat auch nicht funktioniert.