ユーザー入力を他のプログラムに渡す

ユーザー入力を他のプログラムに渡す

catパラメータなしで実行すると、ユーザー入力が反映されることがわかります。

$ cat
test
test
reflected
reflected

リフレクションの出力を別のプログラムにパイプしたいですbase64。たとえば、予想される動作は次のとおりです。

$ cat | base64
test
dGVzdA==
another
YW5vdGhlcg==

入力されたとおりにテキストを1行ずつエンコードしたいか、そのようなものを渡したいと思いますnc。ただし、これを使用すると出力が反映されないように見え、エスケープはctrl+C出力なしで全体を終了します。

$ cat | base64
test
fail
^C

すべてが正常に機能する場合は、次のようにエンコード/暗号化された接続を確立できる必要があります(非常に簡単なチャットアプリケーション)。

# client
$ $CMD | encrypt | nc $SERVER $PORT
this is a test
multiple lines
^C

# host
$ nc -lvp | decrypt
this is a test
multiple lines

同様に、次のようにエンコードして保存できる必要があります。

$ CMD | base64  | tee log_file
test
dGVzdA==
another
YW5vdGhlcg==
^C

$ cat log_file
dGVzdA==
YW5vdGhlcg==

すべてがパイプでなければならないことに注意してください。ループを使用すると、nc各反復が新しい接続を確立するため、正しく機能しません。teeそれ以外の場合は、-aファイル内のすべての行(各繰り返し)が上書きされます。ncのようなものから入力パイプを取得しますが、ファイルの代わりにユーザー入力をbase64使用する最後のコマンド(たとえば、、)の1つのインスタンスが必要です。CMDcat

私は、ユーザー入力を1行ずつ別のプロセスにパイプする方法を探しています。可能であれば、短い行を使用することをお勧めします。このようなユーザー入力パイプをどのように取得できますか?

ベストアンサー1

このような?

# this is an infinite loop, but can be changed to whatever you need
while true; do read x; echo "$x" | base64; done

出力:

foo
Zm9vCg==
bar
YmFyCg==

おすすめ記事