วิธีการรับข้อมูลผู้ใช้จากสคริปต์ทุบตีเมื่อเรียกใช้เป็นปฏิบัติการโดยไม่มีขั้ว?


2

ฉันกำลังพยายามสร้างสคริปต์ทุบตีซึ่งนำข้อมูลผู้ใช้บางส่วนและกระบวนการตามอินพุต

สคริปต์นี้สามารถเรียกใช้งานได้และมี shebang

สคริปต์มีลักษณะดังนี้:

#!/bin/bash
read name -p "Enter your name" 
echo $name >> namelist.txt

ฉันไม่ต้องการให้ผู้ใช้เปิดสคริปต์ในเทอร์มินัล สคริปต์ถูกทำให้สามารถเรียกใช้งานได้ (chmod + x) และดับเบิลคลิกที่สคริปต์จะทำให้ทำงาน แต่มันจะไม่หยุดที่จะใส่และไฟล์ยังคงว่างเปล่า

คำตอบ:


2

คุณต้องมี 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

ดู คำถามนี้ หากคุณต้องการให้เครื่องเปิดอยู่หลังจากโปรแกรมเสร็จสิ้น


0

การเข้าตีและการทดลองแบบสุ่มทำให้ฉันได้วิธีแก้ปัญหา

เมื่อคุณคลิกสองครั้งที่แฟ้มที่ปฏิบัติการได้ใน Nautilus ป๊อปอัพจะเปิดขึ้นซึ่งขอให้คุณ "เรียกใช้" สคริปต์ (โดยไม่มีคอนโซล) หรือ "Run in Terminal" หรือ "เปิด" สคริปต์ในโปรแกรมแก้ไขข้อความเริ่มต้น

การเลือก "Run in Terminal จะตอบสนองวัตถุประสงค์"


เพิ่งทราบว่าหากผู้ใช้ตั้งค่าให้เรียกใช้ไฟล์ข้อความที่ปฏิบัติการได้โดยค่าเริ่มต้นมันจะไม่ทำงาน
Lasse Meyer

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