คำถามติดแท็ก shell

เชลล์เป็นอินเตอร์เฟสบรรทัดคำสั่งของ Unix คุณสามารถพิมพ์คำสั่งในเชลล์แบบโต้ตอบหรือเขียนสคริปต์เพื่อทำงานอัตโนมัติ ใช้แท็กนี้สำหรับคำถามที่ใช้กับ / bin / sh และเชลล์ที่เข้ากันได้มากที่สุด (ash, bash, ksh, zsh, …) สำหรับเชลล์สคริปต์ที่มีข้อผิดพลาดโปรดตรวจสอบใน http://shellcheck.net ก่อนโพสต์ที่นี่

2
จำนวนแบ็กสแลชที่จำเป็นสำหรับการหลบหนีแบ็กสแลช regex บนบรรทัดรับคำสั่ง
ฉันเพิ่งมีปัญหากับ regex บางอย่างในบรรทัดคำสั่งและพบว่าสำหรับการจับคู่แบ็กสแลชสามารถใช้อักขระต่าง ๆ ได้ หมายเลขนี้ขึ้นอยู่กับการอ้างอิงที่ใช้สำหรับ regex (ไม่มีเครื่องหมายคำพูดเดี่ยว, เครื่องหมายคำพูดคู่) ดูเซสชั่นทุบตีต่อไปนี้สำหรับสิ่งที่ฉันหมายถึง: echo "#ab\\cd" > file grep -E ab\cd file grep -E ab\\cd file grep -E ab\\\cd file grep -E ab\\\\cd file #ab\cd grep -E ab\\\\\cd file #ab\cd grep -E ab\\\\\\cd file #ab\cd grep -E ab\\\\\\\cd file #ab\cd grep -E ab\\\\\\\\cd file …

2
ใน `ขณะที่ IFS = อ่าน .. 'ทำไม IFS ถึงไม่มีผลกระทบ?
ฉันอาจมีบางอย่างผิดปกติ แต่ดูเหมือนว่าฉันเชื่อว่าการตั้งค่า IFS เป็นหนึ่งในคำสั่งในรายการที่ต้องทำ / เสร็จไม่มีผลอย่างแน่นอน IFS ภายนอก (ภายนอกwhileโครงสร้าง) จะมีชัยในตัวอย่างทั้งหมดที่แสดงในสคริปต์ด้านล่าง .. เกิดอะไรขึ้นที่นี่? ฉันเข้าใจผิดว่า IFS ทำอะไรในสถานการณ์นี้หรือไม่? ฉันคาดว่าผลลัพธ์การแบ่งอาร์เรย์จะเป็นไปตามที่แสดงในคอลัมน์ "คาดหวัง" #!/bin/bash xifs() { echo -n "$(echo -n "$IFS" | xxd -p)"; } # allow for null $IFS show() { x=($1) echo -ne " (${#x[@]})\t |" for ((j=0;j<${#x[@]};j++)); do echo -n "${x[j]}|" done echo …

4
พวกเขาจัดการขับคอมพิวเตอร์ Unix อย่างไรก่อนที่หนูจะคัดลอกและวาง
เนื่องจากยูนิกซ์อายุ 40 ปียูนิกซ์เก่ากว่าการประดิษฐ์เมาส์คอมพิวเตอร์ (อันที่จริงเพียง 3 ปีถ้า Unix มาจาก 1969 และเมาส์จาก 1972) ผู้ใช้ใหม่ทำอะไรบน Unix ได้อย่างไรในโลกโดยไม่ต้องคัดลอกและวาง ฉันรู้ว่าพวกเขามักจะมีโปรแกรมแก้ไขข้อความพร้อมคัดลอก / วาง แต่ทุกอย่างที่ฉันทำบน Linux คือสำเนาจากเว็บเบราว์เซอร์และวาง (จาก CLIPBOARD) ลงใน vim หรือ gedit หรือ terminal gnome คุณเหมือนกันใช่มั้ย ฉันไม่สามารถจินตนาการถึงการโหลดไฟล์ man ลงในกลุ่มคัดลอกและวางโค้ดจากมันลงใน buffer ชั่วคราวจากนั้นให้ทุบตีประมวลผลบัฟเฟอร์นั้น บางทีพวกเขาไม่เคยทิ้ง emacs; นั่นคือคำตอบ?

5
ค้นหาไฟล์ในพา ธ ที่ไม่มี“ อันไหน”?
ฉันสามารถเรียกใช้สคริปต์ได้ (อย่างใด): $ assemble.sh file ... [output] แต่whichหาไม่เจอ: $ which assemble.sh which: no assemble.sh in (/s/std/bin:/usr/afsws/bin:/opt/SUNWspro/bin:/usr/ccs/bin:/usr/ucb:/bin:/usr/bin:/usr/stat/bin:/usr/X11R6/bin:. เป็นไปได้อย่างไร? ฉันจะหาไฟล์นี้ได้จากที่ไหน? ฉันใช้ทุบตี
12 bash  shell  path 

3
รันสคริปต์ sh จาก cron
ฉันมีสคริปต์ test.sh #!/bin/sh php /home/v/file.php sh /root/x/some.sh เมื่อฉันรันไฟล์เป็น root จากบรรทัดคำสั่งมันทำงานได้ sh /home/v/test.sh เมื่อฉันตั้งค่าให้ crontab -e (เป็น cron รูท) ไม่ทำงาน * * * * * sh /home/v/test.sh ฉันทำอะไรผิด ขอบคุณ
12 shell  cron 

8
วิธีการเข้าถึงประวัติทันทีใน Unix?
ตัวอย่างเช่นถ้าฉันทำ mkdir thisismyfolder912 ฉันจำได้ว่ามีวิธีที่ง่ายกว่าในการสลับไปใช้thisismyfolder912มากกว่าทำ cd thisismyfolder912 มันคืออะไรและมันทำงานอย่างไร นอกจากนี้วิธีอื่น ๆ ที่ฉันสามารถใช้คืออะไร

7
งานจริงเพื่อเรียนรู้เชลล์สคริปต์ [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Unix & Linux Stack Exchange ปิดให้บริการใน10 เดือนที่ผ่านมา ฉันกำลังมองหาปัญหาที่พบบ่อยในการจัดการระบบยูนิกซ์และวิธีที่เชลล์สคริปต์สามารถแก้ไขได้ สมบูรณ์เพื่อการศึกษาด้วยตนเอง นอกจากนี้ฉันต้องการทราบว่าคุณจะเรียนรู้การเขียนสคริปต์เชลล์อย่างไร

3
คุณใช้กระสุนยอดนิยมประเภทไหนกันและข้อดีของมันคืออะไร? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา นอกเหนือจากสิ่งที่คุณสามารถ (เรียกว่า?) เรียกเปลือกหอยที่นิยมมากขึ้น (ทุบตี, csh, Korn, zsh) สิ่งอื่น ๆ ที่คุณรู้และใช้และสิ่งที่พวกเขามีคุณสมบัติที่ไม่ซ้ำกัน? ป.ล. - หนึ่งคำตอบต่อเชลล์เหมาะอย่างยิ่งที่จะรวบรวมการสำรวจที่มีความหมาย
12 shell 

1
ต้องใช้อักขระใดบ้างในไฟล์ที่ไม่มีเครื่องหมายคำพูด?
ฉันมีเชลล์ / เทอร์มินัลที่ใช้รันคำสั่ง bash และฉันกำลังหลบหนีช่องว่าง แต่ปรากฎว่าวงเล็บยังต้องหลบหนี ต้องใช้อักขระอื่นใดในการหลีกเลี่ยงชื่อไฟล์ที่ไม่อยู่ในเครื่องหมายคำพูด?

6
โปรแกรมที่สามารถบัฟเฟอร์ stdin หรือไฟล์
นอกเหนือจากการใช้แฟ้มชั่วคราวเพื่อช่วยเหลือมีวิธี / โปรแกรมอาจบัฟเฟอร์ข้อมูลจากแต่ไม่ออกเนื้อหาจนกว่าจะได้รับstdin EOFฉันไม่ต้องการใช้ตัวแปรเชลล์ (เช่นbuffer=$(cat)) โปรแกรมนี้ควรทำงานตามด้านล่าง (สมมติว่าชื่อโปรแกรมคือbuffered-cat) $ buffered-cat line 1 line 2 line 3 ^D # Ctr-D here(End of Line) หลังจากที่โปรแกรมได้รับ^Dแล้วbuffered-catส่งออกเนื้อหา line 1 line 2 line 3
12 shell  stdout  buffer 

2
การใช้งาน set -u ไม่ทำงานอย่างที่คาดไว้
ฉันเรียนรู้วิธีใช้setตัวเลือกต่างๆ ในสคริปต์อย่างมีประสิทธิภาพและพบset -uว่าเหมาะสำหรับการออกจากสคริปต์หากตัวแปรไม่ได้รับการตั้งค่าอย่างเหมาะสม (เช่นการลบผู้ใช้) ตามหน้าmanset -uและset -eทำสิ่งต่อไปนี้ ... -e Exit immediately if a command exits with a non-zero status. -u Treat unset variables as an error when substituting. ฉันสร้างสคริปต์ทดสอบเพื่อทดสอบฟังก์ชันนี้ แต่ดูเหมือนว่าจะไม่ทำงานตามที่คาดไว้ บางทีใครบางคนสามารถอธิบายปัญหาของฉันกับฉันได้ดีกว่าและฉันกำลังตีความผิด ๆ อยู่ที่ไหน? สคริปต์ทดสอบอยู่ด้านล่าง ขอขอบคุณ. set -e set -u testing="This works" echo $? echo ${testing} testing2= echo $? echo ${testing2} …

1
“ wait &” (“ wait ampersand”) เป็นประโยชน์ (bash) shell / shell script สำนวนหรือเทคนิค?
ฉัน "ได้รับมรดก" เชลล์สคริปต์บางตัวสำหรับเครื่อง Linux ที่ใช้เชลล์ "bash" ของ GNU ในกรณีเฉพาะกรณีหนึ่งเครื่องจะรัน GNU bash รุ่น 2.0.5b หนึ่งในสคริปต์เหล่านั้นมีคำสั่งwait &("wait ampersand") ซึ่งเป็นส่วนหนึ่งของ "for line" ของforลูป ตั้งแต่แรกพบดูเหมือนว่าจะเป็นสำนวนที่น่าสนใจ / น่าสนใจ แต่เว็บของฉันค้นหาไม่ได้ส่งคืนสิ่งใดที่เกี่ยวข้อง man waitแสดง manpage "BASH_BUILTINS" ("BASH BUILTINS COMMAND") ซึ่งมีคำอธิบายดังต่อไปนี้: wait [n] Wait for the specified process and return its termination status. n may be a process ID …

2
การใช้คำสั่ง“ ส่งออก” คืออะไร?
ฉันสร้างตัวแปรสภาพแวดล้อมในหน้าต่างเทอร์มินัลหนึ่งและพยายามที่จะสะท้อนในหน้าต่างเทอร์มินัลอื่น ที่แสดงอะไร $TEST=hello หลังจากนั้นฉันส่งออกและลองอีกครั้งechoในหน้าต่างเทอร์มินัลอื่น ผลลัพธ์เหมือนเดิม export TEST แต่ถ้าฉันรันรหัสเดียวกันที่~/.profileตัวแปรล็อกอิน (ต่อท้ายรหัสไปยังไฟล์) สามารถใช้หน้าต่างเทอร์มินัลใดก็ได้ เกิดอะไรขึ้นที่นี่ อะไรคือความแตกต่างระหว่างการเรียกใช้งานโค้ดในเครื่องเทอร์มินัลและการเรียกใช้งานเหมือนกันเมื่อทำการล็อกอิน

2
สร้างตัวแปรและกำหนดค่าผ่านทางลูป (ทุบตี)
มีวิธีสร้างตัวแปร bash และกำหนดค่าผ่านลูปหรือไม่ บางสิ่งบางอย่างตาม: #!/bin/bash c=0 for file in $( ls ); do var"$c"="$file"; let c=$c+1; done แก้ไข: ขอบคุณ @Costas และ @mdpc สำหรับการชี้ให้เห็นว่านี่จะเป็นทางเลือกที่ไม่ดีสำหรับรายการ คำถามเป็นเชิงทฤษฎีเท่านั้น

3
มีวิธีที่จะมีฟังก์ชั่นในสคริปต์อัตโนมัติทุบตีของฉันทำงานกับข้อผิดพลาดคำสั่งใด ๆ ?
ฉันกำลังเขียนเชลล์สคริปต์ที่ต้องทำพวงคำสั่งและทุกคำสั่งขึ้นอยู่กับทุกคำสั่งก่อนหน้า หากคำสั่งใด ๆ ล้มเหลวสคริปต์ทั้งหมดควรล้มเหลวและฉันเรียกใช้ฟังก์ชัน exit ฉันสามารถตรวจสอบรหัสออกของแต่ละคำสั่ง แต่ฉันสงสัยว่ามีโหมดที่ฉันสามารถเปิดใช้งานหรือวิธีการทุบตีให้ทำโดยอัตโนมัติ ตัวอย่างเช่นใช้คำสั่งเหล่านี้: cd foo || myfunc rm a || myfunc cd bar || myfunc rm b || myfunc มีวิธีที่ฉันสามารถส่งสัญญาณไปยังเปลือกอย่างใดก่อนที่จะดำเนินการคำสั่งเหล่านี้ว่ามันควรจะเรียก myfunc หากพวกเขาล้มเหลวเพื่อให้ฉันสามารถเขียนสิ่งที่สะอาดเช่น: cd foo rm a cd bar rm b

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