here-docを使用せずにファイル記述子に複数行を書き、ブロックせずに<&{fd}を読み、削除します。

here-docを使用せずにファイル記述子に複数行を書き、ブロックせずに<&{fd}を読み、削除します。
#!/usr/bin/env bash

auth() { 
    exec 3<<AUTH
$1
$2
AUTH
}

auth test pwd
sh -c 'cat <&3'

認証ファイル/メモリに資格情報を形式で一時的に保存したいと思いますuser/npass。この形式は読んだ後に削除する必要があります<&3。それを読み取るバイナリはbash5 +を持つdocker alpineコンテナで無限に実行され、環境で実行されるため、/bin/shこのようなサブシェルはcat <(echo -e "$1\n$2")機能しません。コマンドの後に一時ファイルを削除することはオプションではありません。

上記のコードは機能しますが、インデントのない文書の外観は気に入らません。実際のタブが利用可能であることはわかっていますが、<<-EOFこれは最終的にパブリックリポジトリに残り、一部の編集者はタブを4つのスペースで置き換えても作業を行う必要があるため、これに頼ることはできません。

echo $user>$3出力(echo -e "$1\n$2")をfdに入れる他の方法はありますか?

<&3私が何をしようとしても、最終的に入力がブロックされ、EOFが終了するのを待つか、fdの内容は削除されません。

よろしくお願いします!

ベストアンサー1

これが良い習慣なのか、何をしたいのかを抽象化すると、次のようになります。

#!/usr/bin/env bash

auth() { 
    exec 3< <(printf "%s\n%s\n" "$1" "$2")
}

auth test pwd
sh -c 'cat <&3'

予想通り、結果は次のとおりです。

$ ./auth.bash 
test
pwd

おすすめ記事