Score:3

ไม่สามารถเพิ่มทางออกจากลูปนี้ได้

ธง ag

พบสคริปต์ที่น่าสนใจนี้ซึ่งวาดหิมะภายในเทอร์มินัลของคุณ อย่างไรก็ตาม.... ฉันต้องการมีตัวเลือกให้พิมพ์ 'q' เมื่อใดก็ได้เพื่อออกจากลูป นี่คือสิ่งที่ฉันมี

 

 LINES=$(บรรทัด tput)
COLUMNS=$(tput cols)
 
ประกาศ -A เกล็ดหิมะ
ประกาศ -A lastflakes
 
แจ่มใส

ฟังก์ชัน move_flake() {    

ฉัน = "$ 1"
 
ถ้า [ "${เกล็ดหิมะ[$i]}" = "" ] || [ "${เกล็ดหิมะ[$i]}" = "$LINES" ]; แล้ว
เกล็ดหิมะ[$i]=0
อื่น
ถ้า [ "${lastflakes[$i]}" != "" ]; แล้ว
printf "\033[%s;%sH \033[1;1H " ${lastflakes[$i]} $i
ไฟ
ไฟ
 
printf "\033[%s;%sH*\033[1;1H" ${เกล็ดหิมะ[$i]} $i
 
เกล็ดสุดท้าย[$i]=${เกล็ดหิมะ[$i]}
เกล็ดหิมะ[$i]=$((${เกล็ดหิมะ[$i]}+1))
}
 
ในขณะที่ :
ทำ
    
i=$(($RANDOM % $คอลัมน์))
 
move_flake $i

สำหรับ x ใน "${!lastflakes[@]}"
ทำ
move_flake "$x"
เสร็จแล้ว
 
นอน 0.1
เสร็จแล้ว

นี่คือที่ฉันได้ลองเพิ่ม ;

echo "พิมพ์ 'q' เพื่อออก"
ขณะอ่าน -n1 -r -p "ต้องการออกจากสคริปต์หรือไม่"
ทำ
    ถ้า [[ $REPLY == q ]];
    แล้ว
        หยุดพัก;
    อื่น
        #อะไรก็ตาม
    ไฟ
เสร็จแล้ว

เพิ่มไว้ในฟังก์ชัน แต่ขอเฉพาะ 'q' ที่จุดเริ่มต้นเท่านั้น จากนั้นพยายามเพิ่มสคริปต์จริงภายในเลิกวนซ้ำและดึงเกล็ดหิมะเท่านั้นแล้วถามอีกครั้งว่าฉันต้องการออกหรือไม่ .... มีความคิดอย่างไรที่จะทำให้งานนี้?

terdon avatar
cn flag
ทำไมคุณไม่ใช้ Ctrl+C เพื่อออก
Score:5
ธง jp

คุณสามารถทำเช่นนี้ในเชลล์ ทุบตี: แทนที่ นอน สั่งการด้วยก อ่าน คำสั่งที่มีการหมดเวลาและปล่อยให้ ในขณะที่ ตรวจสอบของคุณ 'คิว'. ดู

ช่วยอ่าน | น้อย

นี่คือการแสดงหิมะของคุณในเวอร์ชันของฉัน

#!/bin/bash

LINES=$(บรรทัด tput)
COLUMNS=$(tput cols)

ประกาศ -A เกล็ดหิมะ
ประกาศ -A lastflakes
 
แจ่มใส

ฟังก์ชัน move_flake() {    

ฉัน = "$ 1"
 
ถ้า [ "${เกล็ดหิมะ[$i]}" = "" ] || [ "${เกล็ดหิมะ[$i]}" = "$LINES" ]; แล้ว
เกล็ดหิมะ[$i]=0
อื่น
ถ้า [ "${lastflakes[$i]}" != "" ]; แล้ว
printf "\033[%s;%sH \033[1;1H " ${lastflakes[$i]} $i
ไฟ
ไฟ
 
printf "\033[%s;%sH*\033[1;1H" ${เกล็ดหิมะ[$i]} $i
 
เกล็ดสุดท้าย[$i]=${เกล็ดหิมะ[$i]}
เกล็ดหิมะ[$i]=$((${เกล็ดหิมะ[$i]}+1))
}
 
ในขณะที่ [ "$ans" != "q" ]
ทำ
    
 i=$(($RANDOM % $คอลัมน์))
 
 move_flake $i

 สำหรับ x ใน "${!lastflakes[@]}"
 ทำ
  move_flake "$x"
 เสร็จแล้ว
 อ่าน -sn 1 -t 0.1 ans
เสร็จแล้ว
terdon avatar
cn flag
ฮา! ฉันไม่รู้ว่า `read` ของ bash มีตัวเลือกการหมดเวลา ดี!
sudodus avatar
jp flag
@terdon ใช่ มันเป็นตัวเลือกที่ดี ฉันใช้มันหลายครั้งในสคริปต์ของฉัน :-)
WinEunuuchs2Unix avatar
in flag
@terdon ฉันจะต้องอ่านเพิ่มเติมเกี่ยวกับคำสั่ง `read` ด้วย: P
Erniemenendez avatar
ag flag
มหัศจรรย์!!! ขอบคุณมาก!!!!
sudodus avatar
jp flag
ยินดีต้อนรับ @Erniemenendez :-) ฉันสนุกกับหน้าจอหิมะ ใช้เพื่อเตรียมพร้อมสำหรับฤดูหนาว ... ทำให้มันเต็มหน้าจอด้วย `xterm`: `xterm -fullscreen -e bash -c 'sleep 1;./snow' ` จากไดเรกทอรีที่ฉันใส่สคริปต์ หากคุณปล่อยให้หิมะละลายบนพื้น มันจะเป็นสกรีนเซฟเวอร์ที่เรียบง่ายแต่ดูดี

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา