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

คำว่า 'เชลล์' หมายถึงคลาสทั่วไปของล่ามคำสั่งแบบโต้ตอบตามข้อความซึ่งส่วนใหญ่มักเกี่ยวข้องกับระบบปฏิบัติการ Unix & Linux สำหรับคำถามเกี่ยวกับการเขียนสคริปต์เชลล์โปรดใช้แท็กเฉพาะเพิ่มเติมเช่น 'bash', 'powershell' หรือ 'ksh' หากไม่มีแท็กเฉพาะควรใช้วิธีแก้ปัญหาแบบพกพา (POSIX-compliant) แม้ว่าจะใช้ 'posix' เพิ่มเติมหรือ 'sh' แทนก็ตาม

10
วิธีใช้หลายอาร์กิวเมนต์สำหรับ awk กับ shebang (เช่น #!)
ฉันต้องการเรียกใช้สคริปต์gawk--re-intervalโดยใช้ shebang แนวทาง "ไร้เดียงสา" ของ #!/usr/bin/gawk --re-interval -f ... awk script goes here ใช้งานไม่ได้เนื่องจาก gawk ถูกเรียกด้วยอาร์กิวเมนต์แรก"--re-interval -f"(ไม่ถูกแยกออกจากช่องว่าง) ซึ่งไม่เข้าใจ มีวิธีแก้ปัญหาสำหรับสิ่งนั้นหรือไม่? แน่นอนคุณไม่สามารถเรียก gawk ได้โดยตรง แต่รวมไว้ในเชลล์สคริปต์ที่แยกอาร์กิวเมนต์แรกหรือสร้างเชลล์สคริปต์ที่เรียกว่า gawk และใส่สคริปต์ลงในไฟล์อื่น แต่ฉันสงสัยว่ามีวิธีทำหรือไม่ นี้ภายในไฟล์เดียว ลักษณะการทำงานของเส้น Shebang แตกต่างกันไปในแต่ละระบบ - อย่างน้อยในCygwinจะไม่แบ่งอาร์กิวเมนต์ด้วยช่องว่าง ฉันแค่สนใจว่าจะทำอย่างไรกับระบบที่มีพฤติกรรมเช่นนั้น สคริปต์ไม่ได้มีไว้สำหรับพกพา
118 shell  unix  awk  gawk  shebang 

5
แสดงวันที่และเวลาปัจจุบันโดยไม่มีเครื่องหมายวรรคตอน
ตัวอย่างเช่นฉันต้องการแสดงวันที่และเวลาปัจจุบันเป็นรูปแบบต่อไปนี้: yyyymmddhhmmss ฉันจะทำอย่างไร? ดูเหมือนว่ารูปแบบวันที่ส่วนใหญ่มาพร้อมกับ-, /, :ฯลฯ
118 bash  shell  date 

27
คำสั่งเทอร์มินัลใดที่จะได้รับเพียงที่อยู่ IP และไม่มีอะไรอื่น
ฉันพยายามใช้แค่ที่อยู่ IP (inet) เป็นพารามิเตอร์ในสคริปต์ที่ฉันเขียน มีวิธีง่ายๆใน Unix Terminal เพื่อรับเฉพาะที่อยู่ IP แทนที่จะมองผ่านifconfigหรือไม่?
118 shell  unix  ip-address 


26
ตรวจสอบจากเชลล์สคริปต์ว่าไดเร็กทอรีมีไฟล์หรือไม่
จากเชลล์สคริปต์ฉันจะตรวจสอบได้อย่างไรว่าไดเร็กทอรีมีไฟล์หรือไม่ สิ่งที่คล้ายกับสิ่งนี้ if [ -e /some/dir/* ]; then echo "huzzah"; fi; แต่จะใช้งานได้ถ้าไดเร็กทอรีมีไฟล์เดียวหรือหลายไฟล์ (ไฟล์ด้านบนใช้ได้กับไฟล์ 0 หรือ 1 ไฟล์เท่านั้น)
117 bash  unix  shell 

4
ตรวจสอบว่าเอาต์พุตของคำสั่งมีสตริงที่แน่นอนในเชลล์สคริปต์หรือไม่
ฉันกำลังเขียนเชลล์สคริปต์และฉันกำลังพยายามตรวจสอบว่าผลลัพธ์ของคำสั่งมีสตริงที่แน่นอนหรือไม่ ฉันคิดว่าฉันอาจต้องใช้ grep แต่ฉันไม่แน่ใจว่าจะทำอย่างไร มีใครรู้บ้าง?
117 bash  shell  grep 


12
ฉันจะแก้ไข / etc / sudoers จากสคริปต์ได้อย่างไร
ฉันต้องการแก้ไข/etc/sudoersจากสคริปต์เพื่อเพิ่ม / ลบสิ่งต่างๆจากรายการสีขาว สมมติว่าฉันมีคำสั่งที่ใช้กับไฟล์ปกติฉันจะนำไปใช้กับมันได้/etc/sudoersอย่างไร? ฉันสามารถคัดลอกและแก้ไขแล้วvisudoแทนที่ต้นฉบับด้วยสำเนาที่แก้ไขได้หรือไม่ โดยให้สคริปต์ของฉันเองใน$EDITOR? หรือฉันสามารถใช้ล็อคเดียวกันและcp? คำถามนี้เกี่ยวกับปัญหาที่อาจเกิดขึ้นมากกว่าแค่การค้นหาสิ่งที่ใช้ได้ผล
116 linux  shell  sudo 

19
ฉันจะลบบรรทัดใหม่ออกจากไฟล์ข้อความได้อย่างไร
ฉันมีข้อมูลต่อไปนี้และจำเป็นต้องรวมข้อมูลทั้งหมดไว้ในบรรทัดเดียว ฉันมีสิ่งนี้: 22791 ; 14336 ; 22821 ; 34653 ; 21491 ; 25522 ; 33238 ; ฉันต้องการนี้: 22791;14336;22821;34653;21491;25522;33238; แก้ไข ไม่มีคำสั่งใดทำงานได้อย่างสมบูรณ์ ส่วนใหญ่ให้ข้อมูลมีลักษณะดังนี้ 22791 ;14336 ;22821 ;34653 ;21491 ;25522
116 linux  bash  scripting  shell  sed 


5
เรียกใช้ไฟล์ JAR จากบรรทัดรับคำสั่งและระบุ classpath
ฉันได้รวบรวมไฟล์JARและระบุ Main-Class ในรายการ (ฉันใช้ฟังก์ชันEclipse Export ) libการอ้างอิงของฉันที่มีทั้งหมดในไดเรกทอรีที่ระบุว่า ดูเหมือนจะไม่ได้คำตอบที่ตรงเกี่ยวกับวิธีเรียกใช้ไฟล์ JAR ของฉันในขณะที่ระบุว่าควรใช้lib/*เป็น classpath ฉันพยายามแล้ว: ]$ java -jar -cp .:lib/* MyJar.jar ]$ java -cp .:lib/* -jar MyJar.jar ]$ java -cp .:lib/* com.somepackage.subpackage.Main ฯลฯ ... แต่ละข้อให้ข้อผิดพลาดว่า: Error: Could not find or load main class .... หรือNoClassDefFoundErrorระบุว่าไม่พบไลบรารี ฉันพยายามสร้างไฟล์ JAR ใหม่และรวมlibไดเร็กทอรีและเนื้อหา แต่ก็ยังไม่มีลูกเต๋า ... ฉันจะเรียกใช้ไฟล์ JAR จากบรรทัดคำสั่งและระบุ …

30
วิธีใดเป็นวิธีที่ดีที่สุดในการลบเส้นทางออกจากตัวแปร $ PATH ใน Bash
หรือโดยทั่วไปฉันจะลบรายการออกจากรายการที่คั่นด้วยโคลอนในตัวแปรสภาพแวดล้อม Bash ได้อย่างไร ฉันคิดว่าฉันเคยเห็นวิธีง่ายๆในการทำเมื่อหลายปีก่อนโดยใช้รูปแบบการขยายตัวแปร Bash ขั้นสูง แต่ถ้าเป็นเช่นนั้นฉันก็หลงทาง การค้นหา Google อย่างรวดเร็วพบผลลัพธ์ที่เกี่ยวข้องเพียงไม่กี่รายการและไม่มีสิ่งใดที่ฉันจะเรียกว่า "เรียบง่าย" หรือ "หรูหรา" ตัวอย่างเช่นสองวิธีโดยใช้ sed และ awk ตามลำดับ: PATH=$(echo $PATH | sed -e 's;:\?/home/user/bin;;' -e 's;/home/user/bin:\?;;') PATH=!(awk -F: '{for(i=1;i<=NF;i++){if(!($i in a)){a[$i];printf s$i;s=":"}}}'<<<$PATH) ไม่มีอะไรตรงไปตรงมา? มีอะไรที่คล้ายคลึงกับฟังก์ชัน split () ใน Bash หรือไม่? ปรับปรุง: ดูเหมือนว่าฉันต้องขอโทษสำหรับคำถามที่คลุมเครือโดยเจตนา ฉันไม่ค่อยสนใจที่จะแก้ปัญหาการใช้งานที่เฉพาะเจาะจงมากกว่าการกระตุ้นให้เกิดการสนทนาที่ดี โชคดีที่ได้มา! มีเทคนิคที่ชาญฉลาดอยู่ที่นี่ ในท้ายที่สุดฉันได้เพิ่มฟังก์ชั่นสามอย่างต่อไปนี้ในกล่องเครื่องมือของฉัน เวทมนตร์เกิดขึ้นใน path_remove ซึ่งส่วนใหญ่มาจากการใช้awkตัวแปร RS อย่างชาญฉลาดของ …

6
คุณต่อท้ายสตริงที่มีอยู่แล้วได้อย่างไร?
ฉันต้องการต่อท้ายสตริงเพื่อให้ทุกครั้งที่วนซ้ำจะเพิ่มพูดว่า "test" ในสตริง เช่นเดียวกับใน PHP คุณจะทำ: $teststr = "test1\n" $teststr .= "test2\n" echo = "$teststr" echos: test1 test2 แต่ฉันต้องทำในเชลล์สคริปต์

10
ฉันจะเปิด Shell ภายใน Vim Window ได้อย่างไร
ฉันสามารถเปิดเชลล์ได้โดยใช้คำสั่ง: shell ใน Vim แต่ฉันไม่สามารถแก้ไขไฟล์ได้และในเวลาเดียวกันก็ใช้เชลล์ มีวิธีใดบ้างในการแบ่ง Vim ในหลาย ๆ Windows (หรือแท็บ) และเปิดเชลล์ในหนึ่งในนั้นหรือไม่?
114 vim  shell  window 

6
rsync คัดลอกเฉพาะไฟล์บางประเภทโดยใช้ตัวเลือก include
ฉันใช้สคริปต์ทุบตีต่อไปนี้เพื่อคัดลอกเฉพาะไฟล์ที่มีนามสกุลบางไฟล์ (ในกรณีนี้คือ * .sh) แต่มันก็ยังคงคัดลอกไฟล์ทั้งหมด เป็นอะไรไป? จาก = $ 1 ถึง = $ 2 rsync -zarv --include = "*. sh" $ จาก $ ถึง
114 linux  bash  shell  rsync 

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