Fifo
每次寫入輸入時讀取一次命名管道
我需要編寫一個 bash 程序,該程序執行回顯到它讀取的命名管道的命令,但只有在發送命令時我才能讓它工作。它不斷重複上一個命令,直到寫入新命令。
那是:
- 執行
./read_pipe.sh
- 它一直等到命令回顯
pipe
並讀取它。- 它執行一次命令。<- 什麼不起作用。它永遠執行它。
- 從第 2 步開始重複。
我的
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
如果我
cat "echo 'Hello World'" > mypipe
的輸出永遠是這樣:Running "echo 'Hello World'" ... Running "echo 'Hello World'" ... Running "echo 'Hello World'" ... Running "echo 'Hello World'" ... ...
如何執行命令一次並等待另一個回顯命令?
一種方法:
#! /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
不過,取消註釋該
sh
行可能是一個非常糟糕的主意。
在您的情況下,您可以簡單地執行以下操作:
tail -f $pipe | sh &
不需要循環。