สมมติฐานของคุณ:
fortune | tee >(?stdout?) | pbcopy
จะไม่ทำงานเพราะการส่งออกจะถูกเขียนไปออกมาตรฐานสองครั้งเพื่อให้คุณจะเป็นสองเท่าออกไปfortune
pbcopy
ใน OSX (และการสนับสนุนระบบอื่น ๆ/dev/std{out,err,in}
) คุณสามารถตรวจสอบได้:
$ echo 1 | tee /dev/stdout | sed 's/1/2/'
2
2
การส่งออก2
ครั้งที่สองแทนและ1
2
คุณต้องใช้ file descriptors อื่น ๆ ตัวอย่างข้อผิดพลาดมาตรฐานผ่าน/dev/stderr
:
$ echo 1 | tee /dev/stderr | sed 's/1/2/'
1
2
หรือใช้tty
เพื่อรับเทอร์มินัลหลอกที่เชื่อมต่ออยู่:
$ echo 1 | tee "$(tty)" | sed 's/1/2/'
1
2
ด้วยzsh
และmultios
ชุดตัวเลือกคุณไม่จำเป็นต้องทำอะไรเลยtee
:
$ echo 1 >/dev/stderr | sed 's/1/2/'
1
2
fortune | tee $(tty) | pbcopy
อย่างไร?