Why my named pipe input command line just hangs when it is called?
Based on the answers:
- Writing to stdin of background process
- Accessing bash command line args $@ vs $*
- Send command to a background process
- Can I redirect output to a log file and background a process at the same time?
I wrote two shell scripts to communicate with my game server. And worked the first time I did it. Since it them they do not work anymore. Every time I do ./send.sh commands the command line hangs until I hit Ctrl+C.
It also hangs and does nothing when I do directly echo commamd > /tmp/srv-input
The scripts
It does start the server and configure it to read/receive my commands while it run in background:
start_czero_server.sh
#!/bin/sh # Go to the game server application folder where the game application `hlds_run` is cd /home/user/Half-Life pkill -f hlds # Set up a pipe named `/tmp/srv-input` rm /tmp/srv-input mkfifo /tmp/srv-input cat > /tmp/srv-input & echo $! > /tmp/srv-input-cat-pid # Start the server reading from the pipe named `/tmp/srv-input` # And also output all its console to the file `/home/user/Half-Life/my_logs.txt` cat /tmp/srv-input | ./hlds_run -console -game czero +port 27015 > my_logs.txt 2>&1 & # Successful execution exit 0 This second script it just a wrapper which allow me easily to send commands to the my server:
send.sh
#!/bin/sh echo "$@" > /tmp/srv-input # Successful execution exit 0 Now every time I want to send a command to my server I just do on the terminal:
./send.sh mp_timelimit 30 I always keep another open terminal open just to listen to my server server console. To do it just use the tail command with the -f flag to follow my server console output:
./tail -f /home/user/Half-Life/my_logs.txt