Closed7
Bash の Process Substitution で read write されるファイルの代替(clasp で `.clasprc.json` をファイルにしないで認証させたい)
- GitHub Actions で clasp を使う場合
.clasprc.json
をどこかに保存する必要がある - clasp はコマンド実行時にリフレッシュトークンで更新されたトークンなどを
.clasprc.json
へ書き込む - できればファイルをストレージ上に保存したくない(うっかりキャッシュに含めてしまう可能性)
ということで Process Substitution でどうにかできないかと考えた。
こういうイメージ $ clasp --auth <(gen-clasprc.sh) push
ここで問題なのは「read write されるファイルの代わりにするのはどうなの?」という部分。
read と write は単独でならできる。
(write は日経 Linux 最新号のシス管系女子でやってた)
read でよくみかける例。
$ diff test1.json test2.json
1c1
< {"abc":123,"efg":456,"ABC":123,"EFG":456}
---
> {"abc":123,"efg":457,"ABC":123,"EFG":456}
$ diff <(jq . test1.json) <(jq . test2.json)
3c3
< "efg": 456,
---
> "efg": 457,
write の例、あまりよくないが。
$ echo -ne 'test\ncheck\n--end--\n' | tee >( grep check)
test
check
--end--
check
そもそもパーミッションはどうなっているのか?
$ ls -l <(:)
lr-x------ 1 node node 64 Jan 20 13:21 /dev/fd/63 -> 'pipe:[41095079]'
$ ls -l >(:)
l-wx------ 1 node node 64 Jan 20 13:21 /dev/fd/63 -> 'pipe:[41093926]'
それぞれ read と write が付く。
<()
で write も付いてないかなと思っていのだが。
ちなみに <>()
は無い。
$ ls -l <>(:)
-bash: 予期しないトークン `(' 周辺に構文エラーがあります
<()
に書き出したらどうなるのか。
$ echo "abc" | tee >(cat)
abc
abc
$ echo "abc" | tee <(echo efg)
abc
$ echo "${?}"
0
tee
だとエラーにならないがこれはコマンド側の実装によるかな。
clasp で試してみたが上手くいかなかった。
$ bash scripts/gen-clasprc.sh > .clasprc.json
$ clasp --auth .clasprc.json push
└─ appsscript.json
└─ build/md2html.js
Pushed 2 files.
$ rm .clasprc.json
$ clasp --auth <(bash scripts/gen-clasprc.sh) push
Could not read API credentials. Are you logged in globally?
更新さればかりの .clasprc.json
の内容を使ってもみたけど結果は同じ。
write 以前に何度か読み直しているような気もするのでちょっと捻っただけでは難しいかな。
ということでクローズ。
このスクラップは2022/01/20にクローズされました