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

สำหรับคำถามเกี่ยวกับสคริปต์ที่เขียนขึ้นสำหรับเชลล์คำสั่ง Bash สำหรับเชลล์สคริปต์ที่มีข้อผิดพลาด / ข้อผิดพลาดทางไวยากรณ์โปรดตรวจสอบด้วยโปรแกรม shellcheck (หรือในเซิร์ฟเวอร์ shellcheck เว็บที่ https://shellcheck.net) ก่อนโพสต์ที่นี่ คำถามเกี่ยวกับการใช้งานอินเทอร์แอคทีฟของ Bash นั้นมีแนวโน้มที่จะอยู่ในหัวข้อของผู้ใช้ขั้นสูงมากกว่าในสแต็คโอเวอร์โฟลว์


14
มีวิธีรัดกุมในการตรวจสอบว่าตัวแปรสภาพแวดล้อมถูกตั้งค่าใน Unix shell script อย่างไร
ฉันมีสคริปต์ Unix shell บางตัวที่ฉันต้องตรวจสอบว่าตัวแปรสภาพแวดล้อมบางตัวถูกตั้งค่าก่อนที่ฉันจะเริ่มทำสิ่งต่าง ๆ ดังนั้นฉันจึงทำสิ่งนี้: if [ -z "$STATE" ]; then echo "Need to set STATE" exit 1 fi if [ -z "$DEST" ]; then echo "Need to set DEST" exit 1 fi ซึ่งพิมพ์เยอะมาก มีสำนวนที่สง่างามกว่าสำหรับการตรวจสอบว่าชุดของตัวแปรสภาพแวดล้อมถูกตั้งค่าหรือไม่? แก้ไข: ฉันควรพูดถึงว่าตัวแปรเหล่านี้ไม่มีค่าเริ่มต้นที่มีความหมาย - สคริปต์ควรผิดพลาดหากมีการตั้งค่า
500 bash  unix  shell 

23
คำสั่ง ls: ฉันจะได้รับรายชื่อเต็มเส้นทางแบบเรียกซ้ำหนึ่งบรรทัดต่อไฟล์ได้อย่างไร
ฉันจะรับ ls เพื่อแยกรายการแบบแบนของเส้นทางแบบหนึ่งต่อบรรทัดแบบเรียกซ้ำได้อย่างไร? ตัวอย่างเช่นฉันเพียงต้องการรายชื่อไฟล์ที่มีเส้นทางเต็มของพวกเขา: /home/dreftymac/. /home/dreftymac/foo.txt /home/dreftymac/bar.txt /home/dreftymac/stackoverflow /home/dreftymac/stackoverflow/alpha.txt /home/dreftymac/stackoverflow/bravo.txt /home/dreftymac/stackoverflow/charlie.txt ls -a1 เกือบจะเป็นสิ่งที่ฉันต้องการ แต่ฉันไม่ต้องการแฟรกเมนต์พา ธ ฉันต้องการพา ธ เต็ม
493 bash  command-line  find  ls 

9
ทำไมคุณต้องใส่ #! / bin / bash ที่จุดเริ่มต้นของไฟล์สคริปต์
ฉันเคยสร้างสคริปต์Bashมาก่อนและพวกเขาก็ทำงานได้ดีโดยไม่ต้อง#!/bin/bashเริ่มต้น จุดประสงค์ของการวางไว้คืออะไร? สิ่งต่าง ๆ จะแตกต่างกันอย่างไร นอกจากนี้คุณออกเสียง#อย่างไร ฉันรู้ว่า!มันออกเสียงว่า "ปัง" #!เด่นชัดเป็นอย่างไร
486 linux  bash  scripting  shebang 

9
ลบคำนำหน้า / คำต่อท้ายคงที่จากสตริงใน Bash
ในbashสคริปต์ของฉันฉันมีสตริงและคำนำหน้า / คำต่อท้าย ฉันต้องการลบคำนำหน้า / คำต่อท้ายจากสตริงเดิม ตัวอย่างเช่นสมมติว่าฉันมีค่าต่อไปนี้: string="hello-world" prefix="hell" suffix="ld" ฉันจะรับผลลัพธ์ต่อไปนี้ได้อย่างไร result="o-wor"
485 bash 

23
ฉันจะเปลี่ยนชื่อนามสกุลสำหรับกลุ่มของไฟล์ได้อย่างไร
ในไดเรกทอรีฉันมี*.htmlไฟล์มากมาย ฉันต้องการเปลี่ยนชื่อพวกเขาทั้งหมดเป็น*.txt ฉันจะทำสิ่งนั้นได้อย่างไร ฉันใช้เปลือก bash
479 bash  rename  file-rename 


8
วิธีเขียนสคริปต์ทุบตีที่รับอาร์กิวเมนต์อินพุตเสริมหรือไม่?
ฉันต้องการให้สคริปต์ของฉันสามารถเลือกอินพุตได้ เช่นปัจจุบันสคริปต์ของฉันคือ #!/bin/bash somecommand foo แต่ฉันอยากจะบอกว่า: #!/bin/bash somecommand [ if $1 exists, $1, else, foo ]

18
วิธีคืนค่าสตริงจากฟังก์ชัน Bash
ฉันต้องการคืนสตริงจากฟังก์ชัน Bash ฉันจะเขียนตัวอย่างใน java เพื่อแสดงสิ่งที่ฉันต้องการจะทำ: public String getSomeString() { return "tadaa"; } String variable = getSomeString(); ตัวอย่างด้านล่างใช้งานได้ดี แต่มีวิธีที่ดีกว่าในการทำเช่นนี้หรือไม่ function getSomeString { echo "tadaa" } VARIABLE=$(getSomeString)

17
จะสร้างไฟล์ใน Linux จากหน้าต่างเทอร์มินอลได้อย่างไร? [ปิด]
ปิด คำถามนี้ต้องการรายละเอียดหรือความคมชัด ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ เพิ่มรายละเอียดและชี้แจงปัญหาโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 เดือนที่ผ่านมา วิธีที่ง่ายที่สุดในการสร้างไฟล์ใน terminal Linux คืออะไร?

19
คำสั่ง bash / fish เพื่อพิมพ์พา ธ สัมบูรณ์ไปยังไฟล์
คำถาม: มีคำสั่ง sh / bash / zsh / fish / ... อย่างง่าย ๆ เพื่อพิมพ์พา ธ สัมบูรณ์ของไฟล์ใดก็ตามที่ฉันป้อน กรณีการใช้งาน: ฉันในไดเรกทอรี/a/bและฉันต้องการพิมพ์เส้นทางแบบเต็มไปยังไฟล์บนบรรทัดคำสั่งเพื่อที่ฉันสามารถวางลงในโปรแกรมอื่น:c /a/b/cเรียบง่าย แต่โปรแกรมเล็ก ๆ น้อย ๆ ในการทำเช่นนี้อาจช่วยฉันได้ 5 หรือประมาณวินาทีในการจัดการเส้นทางที่ยาวซึ่งในที่สุดจะเพิ่มขึ้น ดังนั้นฉันจึงประหลาดใจที่ฉันไม่สามารถหายูทิลิตี้มาตรฐานเพื่อทำสิ่งนี้ - ไม่มีจริงเหรอ? นี่คือตัวอย่างการใช้งาน abspath.py: #!/usr/bin/python # Author: Diggory Hardy <diggory.hardy@gmail.com> # Licence: public domain # Purpose: print the absolute path of all input …
448 bash  shell  path 

12
Bash ละเว้นข้อผิดพลาดสำหรับคำสั่งเฉพาะ
ฉันใช้ตัวเลือกต่อไปนี้ set -o pipefail set -e ในสคริปต์ทุบตีเพื่อหยุดการดำเนินการเกี่ยวกับข้อผิดพลาด ฉันมีสคริปต์ประมาณ 100 บรรทัดและฉันไม่ต้องการตรวจสอบรหัสส่งคืนของทุกบรรทัดในสคริปต์ แต่สำหรับหนึ่งคำสั่งเฉพาะฉันต้องการละเว้นข้อผิดพลาด ฉันจะทำสิ่งนั้นได้อย่างไร
444 linux  bash 

4
ประมวลผลอาร์กิวเมนต์ทั้งหมดยกเว้นอาร์กิวเมนต์แรก (ในสคริปต์ทุบตี)
ฉันมีสคริปต์ง่าย ๆ ที่อาร์กิวเมนต์แรกถูกสงวนไว้สำหรับชื่อไฟล์และอาร์กิวเมนต์ตัวเลือกอื่น ๆ ทั้งหมดควรถูกส่งผ่านไปยังส่วนอื่น ๆ ของสคริปต์ เมื่อใช้ Google ฉันพบวิกินี้แต่มีตัวอย่างจริง: echo "${@: -1}" ฉันไม่สามารถทำงานอย่างอื่นได้เช่น: echo "${@:2}" หรือ echo "${@:2,1}" ฉันได้รับ "การทดแทนไม่ดี" จากเทอร์มินัล ปัญหาคืออะไรและฉันจะดำเนินการทั้งหมดอย่างไร แต่อาร์กิวเมนต์แรกที่ส่งไปยังสคริปต์ทุบตี
444 bash  shell 

30
ตรวจสอบว่าอาร์เรย์ Bash มีค่าหรือไม่
ใน Bash วิธีที่ง่ายที่สุดในการทดสอบว่าอาร์เรย์มีค่าที่แน่นอนคืออะไร แก้ไข : ด้วยความช่วยเหลือจากคำตอบและความคิดเห็นหลังจากการทดสอบบางอย่างฉันมาด้วยสิ่งนี้: function contains() { local n=$# local value=${!n} for ((i=1;i < $#;i++)) { if [ "${!i}" == "${value}" ]; then echo "y" return 0 fi } echo "n" return 1 } A=("one" "two" "three four") if [ $(contains "${A[@]}" "one") == "y" ]; then echo …
443 arrays  bash 


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