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

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

5
ข้อผิดพลาด“ ผู้ประกอบการที่คาดหวังไม่พร้อม” ใน Bash หากมีเงื่อนไข
ฉันพยายามที่จะเข้าใจว่ามีอะไรผิดปกติ แต่ก็ไม่สามารถเข้าใจได้ .. นี่คือส่วนที่ดูเหมือนว่าจะได้รับข้อผิดพลาด .. elif [ $operation = "man" ]; then if [ $aug1 = "add" ]; then # <- Line 75 echo "Man Page for: add" echo "" echo "Syntax: add [number 1] [number 2]" echo "" echo "Description:" echo "Add two different numbers together." echo "" echo …
225 bash  shell 

20
วิธีการคำนวณเวลาที่ผ่านไปในสคริปต์ทุบตี?
ฉันพิมพ์เวลาเริ่มต้นและสิ้นสุดโดยใช้date +"%T"ซึ่งจะมีผลดังนี้: 10:33:56 10:36:10 ฉันจะคำนวณและพิมพ์ความแตกต่างระหว่างสองสิ่งนี้ได้อย่างไร ฉันต้องการที่จะได้รับสิ่งที่ชอบ: 2m 14s
224 bash  date 

8
วิธีการแยกหนึ่งสายออกเป็นหลายสายโดยคั่นด้วยช่องว่างอย่างน้อยหนึ่งช่องในเปลือกหอย
ฉันมีสตริงที่มีหลายคำอย่างน้อยหนึ่งช่องว่างระหว่างแต่ละสอง ฉันจะแยกสตริงออกเป็นแต่ละคำเพื่อให้สามารถวนซ้ำได้อย่างไร สตริงถูกส่งเป็นอาร์กิวเมนต์ ${2} == "cat cat file"เช่น ฉันจะวนซ้ำมันได้อย่างไร นอกจากนี้ฉันจะตรวจสอบว่าสตริงมีช่องว่างได้อย่างไร
224 bash  shell  string  split 

18
คุณสะท้อนอักขระ Unicode 4 หลักใน Bash ได้อย่างไร
ฉันต้องการเพิ่มกะโหลก Unicode และ crossbones ใน shell prompt ของฉัน (โดยเฉพาะ 'SKULL AND CROSSBONES' (U + 2620)) แต่ฉันไม่สามารถหาคาถาเวทมนต์เพื่อสะท้อนเสียงคายหรือสิ่งอื่นใด อักขระ Unicode 4 หลัก หนึ่งหลักสองหลักนั้นง่าย ตัวอย่างเช่น echo -e "\ x55", นอกจากคำตอบด้านล่างนี้แล้วควรสังเกตว่าเทอร์มินัลของคุณต้องรองรับ Unicode เพื่อให้ได้ผลลัพธ์ตามที่คุณคาดหวัง gnome-terminal ทำงานได้ดีในเรื่องนี้ แต่ไม่จำเป็นต้องเปิดใช้งานตามค่าเริ่มต้น ในแอป Terminal ของ macOS ไปที่การตั้งค่า -> การเข้ารหัสและเลือก Unicode (UTF-8)

19
ทดสอบว่ากลมมีการแข่งขันใด ๆ ในทุบตี
ถ้าผมต้องการที่จะตรวจสอบการดำรงอยู่ของไฟล์เดียวที่ฉันสามารถทดสอบได้โดยใช้หรือtest -e filename[ -e filename ] สมมติว่าฉันมี glob และฉันต้องการที่จะรู้ว่ามีไฟล์ใด ๆ ที่มีชื่อตรงกับ glob glob สามารถจับคู่ไฟล์ 0 (ในกรณีที่ฉันไม่ต้องทำอะไร) หรือสามารถจับคู่ไฟล์ 1 ไฟล์หรือมากกว่า (ซึ่งในกรณีนี้ฉันต้องทำบางสิ่ง) ฉันจะทดสอบว่า glob มีคู่ที่ตรงกันได้อย่างไร (ฉันไม่สนใจว่ามีการแข่งขันกี่รายการและมันจะดีที่สุดถ้าฉันสามารถทำสิ่งนี้ด้วยifคำสั่งเดียวและไม่มีการวนซ้ำ(เพียงเพราะฉันพบว่าการอ่านที่มากที่สุด) ( test -e glob*ล้มเหลวหาก glob ตรงกับมากกว่าหนึ่งไฟล์)
223 bash  glob 

22
ตรวจสอบว่ามีการติดตั้งแพกเกจ apt-get หรือไม่จากนั้นติดตั้งหากไม่ได้อยู่ใน Linux
ฉันกำลังทำงานกับระบบ Ubuntu และในปัจจุบันนี่คือสิ่งที่ฉันทำ: if ! which command > /dev/null; then echo -e "Command not found! Install? (y/n) \c" read if "$REPLY" = "y"; then sudo apt-get install command fi fi นี่คือสิ่งที่คนส่วนใหญ่จะทำ? หรือมีวิธีการแก้ปัญหาที่สง่างามมากขึ้น?
223 bash  shell  apt-get 

6
แทนที่หนึ่งอักขระด้วยอักขระอื่นใน Bash
ฉันต้องสามารถทำได้คือแทนที่ช่องว่าง ( ) ด้วยจุด ( .) ในสตริงในทุบตี ฉันคิดว่ามันจะค่อนข้างง่าย แต่ฉันใหม่ดังนั้นฉันจึงไม่สามารถหาวิธีแก้ไขตัวอย่างที่คล้ายกันสำหรับการใช้งานนี้
223 string  bash  replace 

7
ฉันจะแสดงรายการฟังก์ชั่นที่กำหนดไว้ในเปลือกของฉันได้อย่างไร
ฉันสามารถพิมพ์นามแฝงเพื่อแสดงรายการชื่อแทนทั้งหมด แต่สำหรับฟังก์ชั่นทั้งหมดที่ฉันสามารถทำได้คือ grep .bash_profileของฉัน ที่ได้รับเฉพาะคนในไฟล์นั้นไม่ใช่สิ่งที่กำหนดไว้ในไฟล์ย่อยหรือแบบไดนามิก มีวิธีที่สะดวกกว่าในการค้นหาว่าฟังก์ชั่นใดบ้างที่ถูกกำหนดไว้ในปัจจุบัน?
223 bash  shell  function  unix 

13
วิธีการวนซ้ำชื่อไฟล์ที่ส่งคืนโดย find
x=$(find . -name "*.txt") echo $x ถ้าฉันเรียกใช้โค้ดข้างบนใน Bash shell สิ่งที่ฉันได้รับคือสตริงที่มีชื่อไฟล์หลายชื่อคั่นด้วยช่องว่างไม่ใช่รายการ แน่นอนฉันสามารถแยกพวกมันออกจากกันเพื่อให้ได้รายการ แต่ฉันแน่ใจว่ามีวิธีที่ดีกว่าในการทำรายการ ดังนั้นวิธีที่ดีที่สุดในการวนลูปผ่านผลลัพธ์ของfindคำสั่งคืออะไร
223 bash  find 

8
วิธีการออกจากถ้าคำสั่งล้มเหลว?
ฉันเป็น noob ในการเขียนสคริปต์เชลล์ ฉันต้องการพิมพ์ข้อความและออกจากสคริปต์หากคำสั่งล้มเหลว ฉันพยายามแล้ว: my_command && (echo 'my_command failed; exit) แต่มันไม่ทำงาน มันยังคงดำเนินการตามคำแนะนำต่อไปนี้บรรทัดในสคริปต์ ฉันใช้ Ubuntu และทุบตี
222 linux  bash  exit  exitstatus 

30
จะเรียกใช้ Conda ได้อย่างไร
ฉันติดตั้ง Anaconda และสามารถเรียกใช้ Python ได้ฉันจึงคิดว่าฉันติดตั้งไว้อย่างถูกต้อง ติดตามเอกสารแนะนำตัวนี้ฉันพยายามติดตั้ง Python v3.3 ดังนั้นฉันจึงคัดลอกและวางบรรทัดต่อไปนี้ในคอนโซลของฉัน: conda create -n py33 python=3.3 anaconda อย่างไรก็ตามนั่นทำให้ฉันมีข้อผิดพลาด: -bash: conda: ไม่พบคำสั่ง ฉันต้องทำอย่างไรเพื่อเรียกใช้ Conda ฉันกำลังทำงานกับระบบ Linux
221 python  bash  anaconda  conda 

8
ลบสองตัวแปรใน Bash
ฉันมีสคริปต์ด้านล่างเพื่อลบจำนวนไฟล์ระหว่างสองไดเรกทอรี แต่การCOUNT=แสดงออกไม่ทำงาน ไวยากรณ์ที่ถูกต้องคืออะไร? #!/usr/bin/env bash FIRSTV=`ls -1 | wc -l` cd .. SECONDV=`ls -1 | wc -l` COUNT=expr $FIRSTV-$SECONDV ## -> gives 'command not found' error echo $COUNT
220 bash  shell  unix 

19
วิธีแก้ไขลิงก์สัญลักษณ์ในเชลล์สคริปต์
กำหนดเส้นทางแบบสัมบูรณ์หรือสัมพัทธ์ (ในระบบเหมือน Unix) ฉันต้องการกำหนดเส้นทางแบบเต็มของเป้าหมายหลังจากแก้ไข symlink ระดับกลางใด ๆ คะแนนโบนัสสำหรับการแก้ไข ~ เครื่องหมายของชื่อผู้ใช้ในเวลาเดียวกัน หากเป้าหมายคือไดเรกทอรีอาจเป็นไปได้ที่จะ chdir () ลงในไดเรกทอรีแล้วเรียกใช้ getcwd () แต่ฉันต้องการทำสิ่งนี้จากเชลล์สคริปต์แทนที่จะเขียนตัวช่วย C น่าเสียดายที่ shells มีแนวโน้มที่จะพยายามซ่อนการมี symlink จากผู้ใช้ (นี่คือ bash บน OS X): $ ls -ld foo bar drwxr-xr-x 2 greg greg 68 Aug 11 22:36 bar lrwxr-xr-x 1 greg greg 3 Aug 11 22:36 …
220 bash  shell  scripting  symlink 

12
วิธีการสร้างการถ่ายโอนข้อมูลหลักใน Linux บนข้อผิดพลาดการแบ่งส่วน?
ฉันมีกระบวนการใน Linux ที่ได้รับการแบ่งกลุ่มผิดพลาด ฉันจะบอกให้สร้างคอร์ดัมพ์เมื่อมันล้มเหลวได้อย่างไร
217 linux  bash  unix  coredump  tcsh 

17
วิธีการตรวจสอบว่าสคริปต์นั้นมีที่มาหรือไม่
ฉันมีสคริปต์ที่ฉันไม่ต้องการให้มันโทรหาexitถ้ามันมีที่มา ฉันคิดว่าการตรวจสอบหากแต่ตอนนี้มีปัญหาหากสคริปต์ที่มีที่มาจากสคริปต์อื่นหรือถ้าแหล่งที่มาของผู้ใช้จากเปลือกแตกต่างกันเช่น $0 == bashksh มีวิธีที่เชื่อถือได้ในการตรวจสอบว่าสคริปต์นั้นมีที่มาหรือไม่?
217 bash  ksh 

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