คุณต้องมี GUI หรือเทอร์มินัลสำหรับการป้อนข้อมูลของผู้ใช้ หากผู้ใช้เปิดสคริปต์ในพูดว่า Nautilus ไม่มี stdin ดังนั้นการอ่านจะส่งคืนทันที ทางออกหนึ่งที่เป็นไปได้คือให้สคริปต์เปิดเทอร์มินัลใหม่และดำเนินการเองในลักษณะนี้:
x-terminal-emulator -e $0
ด้วย x-terminal-emulator จะทำการเรียก terminal-emulator เริ่มต้น สิ่งนี้ใช้ได้กับ Debian & amp; อูบุนตูฉันไม่รู้เรื่อง distros อื่น ๆ
คุณสามารถเรียกใช้เทอร์มินัลเฉพาะเช่น xterm, konsole หรือเทอร์มินัลอื่น ๆ ได้แน่นอน
$0
เป็นเส้นทางไฟล์ของสคริปต์ดังนั้นจึงใช้งานได้เสมอ
คุณต้องทำให้แน่ใจว่าจะไม่เปิดเทอร์มินัลเพิ่มเติมซ้ำ ๆ วิธีหนึ่งที่สามารถใช้งานได้คือตรวจสอบว่าคุณสามารถอ่านจาก stdin ได้หรือไม่เช่นเคย:
โค้ดส่งคืนของคำสั่ง read เป็นศูนย์ยกเว้นจุดสิ้นสุดไฟล์
พบตัวอักษรถ้าหมดเวลาอ่านหรือไฟล์ที่ไม่ถูกต้อง
descriptor ถูกระบุเป็นอาร์กิวเมนต์ของตัวเลือก -u
ดังนั้นตรวจสอบค่าส่งคืนถ้าเป็น! = 0 เปิดเทอร์มินัลใหม่เหมือนด้านบน
ตัวอย่าง:
#!/bin/bash
read -p "Enter first value: " first
# Check return value of last command with $?
if [[ $? != 0 ]]; then
x-terminal-emulator -e $0
else
echo $first
read -p "Enter more: " more
echo $more
fi
ดู คำถามนี้ หากคุณต้องการให้เครื่องเปิดอยู่หลังจากโปรแกรมเสร็จสิ้น