例えばある go のプログラムに
go run main.go <(find .)
のように process substitution をして値を渡したい場合どうやるんだっけと思ったのでメモ
この例の場合 os.Args にファイルディスクリプタが入るのでそこから値を取れます
package main
import (
"fmt"
"io/ioutil"
"os"
)
func main() {
f, _ := os.Open(os.Args[1])
b, _ := ioutil.ReadAll(f)
fmt.Println(string(b))
}
別の input と組み合わせる場合は
go run main.go -hoge XXX -ps <(find .)
package main
import (
"flag"
"fmt"
"io/ioutil"
"os"
)
func main() {
hoge := flag.String("hoge", "", "")
ps := flag.String("ps", "", "process substitution")
flag.Parse()
fmt.Println(*hoge)
f, _ := os.Open(*ps)
b, _ := ioutil.ReadAll(f)
fmt.Print(string(b))
}
とかして flag と合わせるのが一番楽そうです