OS X: เอาต์พุตข้อผิดพลาดการเปลี่ยนเส้นทางของคำสั่งไปยังตัวแปรสภาพแวดล้อม


0

ฉันรู้ว่าฉันสามารถเปลี่ยนเส้นทาง stdout ไปยังตัวแปรสภาพแวดล้อมเช่น

retcode=$(/usr/bin/osascript -e 'do shell script ... with administrator privileges')

แต่จะเปลี่ยนเส้นทางเอาต์พุต stderr ไปยังตัวแปรสภาพแวดล้อมได้อย่างไร (ในตัวอย่างนี้เพื่อตรวจสอบผู้ใช้ที่ยกเลิกกล่องโต้ตอบข้อมูลประจำตัวของผู้ดูแลระบบ)

คำตอบ:


1

นี่เป็นวิธีที่ง่ายที่สุดในการเปลี่ยนเส้นทาง stdout และ stderr ไปยังตัวแปรเดียว:

output=$(/usr/bin/osascript -e 'do shell script ... with administrator privileges' 2>&1)
retcode=$?

มันซับซ้อนมากขึ้นถ้าคุณต้องการจับ stdout และ stderr แยกกัน ฉันคิดว่าวิธีเดียวที่ตรงไปตรงมาคือการเปลี่ยนเส้นทาง stdout / stderr ไปยังไฟล์แยก:

/usr/bin/osascript -e 'do shell script ... with administrator privileges' >/tmp/$$.stdout 2>/tmp/$$.stderr

retcode=$?
output=$(cat /tmp/$$.stdout)
stderr=$(cat /tmp/$$.stderr)

ตรวจสอบให้แน่ใจว่าคุณล้างไฟล์ในภายหลัง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.