0

RedHat EL 4 を使用しています。Bash 3.00.15 を使用しています。

私は SystemVerilog を書いていて、stdin と stdout をエミュレートしたいと思っています。環境では通常の stdin と stdout がサポートされていないため、ファイルのみを使用できます。名前付きパイプを使用して stdin と stdout をエミュレートしたいと考えています。

mkpipe を使用して to_sv および from_sv ファイルを作成する方法と、それらを開いて SystemVerilog で使用する方法を理解しています。

「cat > to_sv」を使用すると、文字列を SystemVerilog シミュレーションに出力できます。しかし、それは私がシェルに入力しているものも出力します。

可能であれば、ほとんど UART 端末のように動作する単一のシェルが欲しいです。入力したものはすべて「to_sv」に直接送信され、「from_sv」に書き込まれたものはすべて印刷されます。

私がこれについて完全に間違っている場合は、必ず正しい方法を提案してください! どうもありがとう、

ナチュム・カノフスキー

4

3 に答える 3

2

編集:名前付きパイプに出力し、同じターミナルで別のパイプから読み取ることができます。を使用して、キーが端末にエコーされるのを無効にすることもできますstty -echo

mkfifo /tmp/from
mkfifo /tmp/to
stty -echo
cat /tmp/from & cat > /tmp/to

このコマンドを使用する/tmp/toと、書き込むすべてがエコーされず、書き込まれたすべて/tmp/fromがエコーされます。

更新: /tmp/to に入力されたすべての文字を一度に 1 つずつ送信する方法を見つけました。cat > /tmp/toこのコマンドを使用する代わりに:

while IFS= read -n1 c;
do  
   if [ -z "$c" ]; then 
      printf "\n" >> /tmp/to; 
   fi; 
   printf "%s" "$c" >> /tmp/to; 
done
于 2011-07-07T04:10:06.960 に答える
0

代わりにcat /tmp/from &使用することもできますtail -f /tmp/from &(少なくともここMac OS X 10.6.7では、これにより、echo複数回使用した場合のデッドロックが防止されました/tmp/from)。

リンチのコードに基づく:

# terminal window 1
(
rm -f /tmp/from /tmp/to
mkfifo /tmp/from
mkfifo /tmp/to
stty -echo
#cat -u /tmp/from & 
tail -f /tmp/from & 
bgpid=$!
trap "kill -TERM ${bgpid}; stty echo; exit" 1 2 3 13 15
while IFS= read -n1 c;
do  
  if [ -z "$c" ]; then 
    printf "\n" >> /tmp/to
  fi; 
  printf "%s" "$c" >> /tmp/to
done
)

# terminal window 2
(
tail -f /tmp/to & 
bgpid=$!
trap "kill -TERM ${bgpid}; stty echo; exit" 1 2 3 13 15
wait
)

# terminal window 3
echo "hello from /tmp/from" > /tmp/from
于 2011-07-08T19:39:38.510 に答える
0

あなたはおそらく次のように使いたいでしょうexec:

exec > to_sv
exec < from_sv

セクション19.1 を参照してください。および19.2。高度なBash スクリプト ガイド - I/O リダイレクト

于 2011-07-07T03:45:49.903 に答える