我需要编写一个 bash 程序,该程序运行回显到它读取的命名管道的命令,但只有在发送命令时才能使其工作。它不断重复上一个命令,直到写入一个新命令。
那是:
./read_pipe.sh
pipe
并读取它。我的 read_pipe.sh
#!/bin/bash
pipe="mypipe"
if [ ! -p $pipe ]; then
echo 'Creating pipe'
mkfifo $pipe
fi
while true
do
if read line <$pipe; then
COMMAND=$(cat $pipe)
echo "Running $COMMAND ..."
# sh -c $COMMAND
fi
done
Run Code Online (Sandbox Code Playgroud)
如果我cat "echo 'Hello World'" > mypipe
的输出永远是这样:
Running "echo 'Hello World'" ...
Running "echo 'Hello World'" ...
Running "echo 'Hello World'" ...
Running "echo 'Hello World'" ...
...
Run Code Online (Sandbox Code Playgroud)
如何运行命令一次并等待另一个回显命令?
一种方法:
#! /usr/bin/env bash
pipe=/path/to/pipe
[ -p "$pipe" ] || mkfifo -m 0600 "$pipe" || exit 1
while :; do
while read -r cmd; do
if [ "$cmd" ]; then
printf 'Running %s ...\n' "$cmd"
# sh -c "$cmd" sh
fi
done <"$pipe"
done
Run Code Online (Sandbox Code Playgroud)
sh
不过,取消注释该行可能是一个非常糟糕的主意。