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つのインスタンスが必要です。CMD
cat
私は、ユーザー入力を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==