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

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

11
คำสั่ง sed ด้วยตัวเลือก -i ที่ล้มเหลวบน Mac แต่ทำงานบน Linux
ฉันใช้sedคำสั่งต่อไปนี้เพื่อค้นหา / แทนที่ข้อความใน Linux สำเร็จแล้ว: sed -i 's/old_link/new_link/g' * อย่างไรก็ตามเมื่อฉันลองบน Mac OS X ของฉันฉันจะได้รับ: "คำสั่ง c คาดว่า \ ตามด้วยข้อความ" ฉันคิดว่า Mac ของฉันใช้เชลล์ BASH แบบปกติ ว่าไง? แก้ไข: ตามประสิทธิภาพสูง @ นี่เป็นเพราะ Mac sedมีรสชาติที่แตกต่างกัน (BSD) ดังนั้นคำถามของฉันจะเป็นอย่างไรฉันจะทำซ้ำคำสั่งนี้ใน BSD ได้sedอย่างไร แก้ไข: นี่คือตัวอย่างจริงที่เป็นสาเหตุของสิ่งนี้: sed -i 's/hello/gbye/g' *
303 linux  macos  bash  sed 

9
การรันคำสั่ง Bash ใน Python
ในเครื่องของฉันฉันใช้สคริปต์ python ซึ่งมีบรรทัดนี้ bashCommand = "cwm --rdf test.rdf --ntriples > test.nt" os.system(bashCommand) ใช้งานได้ดี จากนั้นฉันเรียกใช้รหัสเดียวกันบนเซิร์ฟเวอร์และฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้ 'import site' failed; use -v for traceback Traceback (most recent call last): File "/usr/bin/cwm", line 48, in <module> from swap import diag ImportError: No module named swap ดังนั้นสิ่งที่ผมทำแล้วคือผมใส่print bashCommandที่พิมพ์ผมกว่าคำสั่งใน terminal os.system()ก่อนที่จะทำงานด้วย แน่นอนฉันได้รับข้อผิดพลาดอีกครั้ง (เกิดจากos.system(bashCommand)) แต่ก่อนที่ข้อผิดพลาดนั้นจะพิมพ์คำสั่งใน terminal จากนั้นฉันก็แค่คัดลอกเอาท์พุทนั้นและก็คัดลอกแปะไปที่เทอร์มินัลแล้วกด …
299 python  bash 

7
ฉันจะระงับเอาต์พุตทั้งหมดจากคำสั่งโดยใช้ Bash ได้อย่างไร
ฉันมีสคริปต์ Bash ที่รันโปรแกรมด้วยพารามิเตอร์ โปรแกรมนั้นแสดงสถานะบางสถานะ ไม่มีตัวเลือกใด ๆ สำหรับโปรแกรมนี้ที่จะเงียบ ฉันจะป้องกันไม่ให้สคริปต์แสดงสิ่งใดได้อย่างไร ฉันกำลังมองหาบางสิ่งบางอย่างเช่น Windows' 'สะท้อนออก'
296 bash  shell  scripting  echo 

14
ค้นหาไฟล์ที่มีอยู่ในหนึ่งไดเรกทอรี แต่ไม่อยู่ในอีก [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน2 ปีที่ผ่านมา ล็อคแล้ว คำถามและคำตอบนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ฉันพยายามค้นหาไฟล์ที่มีอยู่ในไดเรกทอรีเดียว แต่ไม่ได้อยู่ในอีกไดเรกทอรีหนึ่งฉันพยายามใช้คำสั่งนี้: diff -q dir1 dir2 ปัญหาเกี่ยวกับคำสั่งดังกล่าวที่พบทั้งสองไฟล์ในdir1แต่ไม่ได้อยู่ในdir2เช่นเดียวกับไฟล์ในdir2แต่ไม่ได้อยู่ในdir1, ฉันพยายามค้นหาไฟล์dir1แต่ไม่dir2เพียงเท่านั้น นี่คือตัวอย่างเล็กน้อยของข้อมูลของฉัน dir1 dir2 dir3 1.txt 1.txt 1.txt 2.txt 3.txt 3.txt 5.txt 4.txt 5.txt 6.txt 7.txt 8.txt คำถามอีกข้อที่อยู่ในใจของฉันคือฉันจะค้นหาไฟล์dir1ได้อย่างไร แต่ไม่ใช่ในdir2หรือdir3ในคำสั่งเดียว?
295 linux  bash  diff 

14
จะส่งรหัสผ่านไปยัง pg_dump ได้อย่างไร
ฉันกำลังพยายามสร้าง cronjob เพื่อสำรองฐานข้อมูลของฉันทุกคืนก่อนที่จะเกิดภัยพิบัติขึ้น ดูเหมือนว่าคำสั่งนี้จะตอบสนองความต้องการของฉัน: 0 3 * * * pg_dump dbname | gzip > ~/backup/db/$(date +%Y-%m-%d).psql.gz ยกเว้นหลังจากทำงานนั้นฉันคาดว่าจะพิมพ์รหัสผ่าน ฉันไม่สามารถทำได้ถ้าฉันเรียกใช้จาก cron ฉันจะส่งผ่านโดยอัตโนมัติได้อย่างไร

17
วิธีการแยกสตริงในเชลล์และรับฟิลด์สุดท้าย
สมมติว่าฉันมีสตริง1:2:3:4:5และฉันต้องการได้รับเขตข้อมูลสุดท้าย ( 5ในกรณีนี้) ฉันจะทำเช่นนั้นโดยใช้ Bash ได้อย่างไร ฉันพยายามแต่ผมไม่ทราบว่าวิธีการระบุข้อมูลที่ผ่านมาด้วยcut-f
293 bash  split  tokenize  cut 

13
OSX bash, คำสั่ง 'watch'
ฉันกำลังมองหาวิธีที่ดีที่สุดในการทำซ้ำคำสั่ง 'watch' Linux บน Mac OSX ฉันต้องการเรียกใช้คำสั่งทุกสองสามวินาทีเพื่อจับคู่รูปแบบกับเนื้อหาของไฟล์เอาต์พุตโดยใช้ 'tail' และ 'sed' ตัวเลือกที่ดีที่สุดของฉันใน Mac คืออะไรและสามารถทำได้โดยไม่ต้องดาวน์โหลดซอฟต์แวร์
292 macos  bash  automation  watch 

10
ดำเนินการคำสั่งกับไฟล์ทั้งหมดในไดเรกทอรี
ใครก็ได้โปรดให้รหัสที่จะทำต่อไปนี้: สมมติว่ามีไดเรกทอรีของไฟล์ทั้งหมดที่จะต้องทำงานผ่านโปรแกรม โปรแกรมจะแสดงผลลัพธ์ออกมาเป็นมาตรฐาน ฉันต้องการสคริปต์ที่จะเข้าไปในไดเรกทอรีรันคำสั่งในแต่ละไฟล์และต่อผลลัพธ์เป็นไฟล์ขนาดใหญ่ไฟล์เดียว ตัวอย่างเช่นการเรียกใช้คำสั่งใน 1 ไฟล์: $ cmd [option] [filename] > results.out
290 bash  scripting 

7
ฉันจะใช้ตัวแปรเชลล์ในสคริปต์ awk ได้อย่างไร
ผมพบว่าวิธีการที่จะผ่านตัวแปรเปลือกภายนอกไปยังawkสคริปต์ แต่ฉันสับสนเกี่ยวกับและ'" ก่อนอื่นฉันลองด้วย shell script: $ v=123test $ echo $v 123test $ echo "$v" 123test จากนั้นลอง awk: $ awk 'BEGIN{print "'$v'"}' $ 123test $ awk 'BEGIN{print '"$v"'}' $ 123 ทำไมถึงแตกต่าง สุดท้ายฉันก็ลองทำสิ่งนี้: $ awk 'BEGIN{print " '$v' "}' $ 123test $ awk 'BEGIN{print ' "$v" '}' awk: cmd. line:1: BEGIN{print awk: …
290 bash  shell  awk 


9
ทำไมคุณต้อง. / (dot-slash) ก่อนที่จะปฏิบัติการหรือชื่อสคริปต์เพื่อรันในทุบตี?
เมื่อรันสคริปต์ใน bash ฉันต้องเขียน./ตอนแรก: $ ./manage.py syncdb หากฉันไม่ฉันได้รับข้อความแจ้งข้อผิดพลาด: $ manage.py syncdb -bash: manage.py: command not found อะไรคือสาเหตุของสิ่งนี้? ฉันคิดว่า.เป็นนามแฝงสำหรับโฟลเดอร์ปัจจุบันดังนั้นการโทรทั้งสองนี้ควรเทียบเท่า ฉันยังไม่เข้าใจด้วยว่าเหตุใดฉันจึงไม่ต้องการ./เมื่อเรียกใช้แอปพลิเคชันเช่น: user:/home/user$ cd /usr/bin user:/usr/bin$ git (ซึ่งทำงานโดยไม่มี./)
288 bash  shell  unix  command-line 

11
วิธีใช้อาร์กิวเมนต์จากคำสั่งก่อนหน้า
ฉันรู้ว่าEsc+ .ให้อาร์กิวเมนต์สุดท้ายของคำสั่งสุดท้ายแก่คุณ แต่ฉันสนใจอาร์กิวเมนต์แรกของคำสั่งสุดท้าย มีกุญแจสำคัญในการทำเช่นนั้นหรือไม่? ในบรรทัดเดียวกันมีวิธีทั่วไปในการรับอาร์กิวเมนต์ที่ n จากคำสั่งสุดท้ายหรือไม่ ฉันรู้ว่าในสคริปต์ทุบตีคุณสามารถใช้$0, $1ฯลฯ แต่เหล่านี้ไม่ทำงานบน commandline นอกจากนี้สิ่งที่เกี่ยวกับการวนซ้ำผ่านอาร์กิวเมนต์ 0 ของคำสั่งก่อนหน้าเช่นเราสามารถทำกับอาร์กิวเมนต์สุดท้ายโดยการกดEsc+ อย่างต่อเนื่อง.?

8
ฉันจะหลีกเลี่ยงคำพูดซ้ำภายในเครื่องหมายคำพูดคู่ได้อย่างไร
ฉันจะหลีกเลี่ยงอัญประกาศคู่ภายในสตริงคู่ใน Bash ได้อย่างไร ตัวอย่างเช่นในเชลล์สคริปต์ของฉัน #!/bin/bash dbload="load data local infile \"'gfpoint.csv'\" into table $dbtable FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY \"'\n'\" IGNORE 1 LINES" ฉันไม่สามารถใช้เครื่องหมายENCLOSED BY '\"'คำพูดคู่เพื่อหลบหนีได้อย่างถูกต้อง $dbtableฉันไม่สามารถใช้คำพูดเดียวสำหรับตัวแปรของฉันเพราะฉันต้องการที่จะใช้ตัวแปร
287 bash  quotes 


22
หมดเวลาคำสั่งในการทุบตีโดยไม่ต้องล่าช้าไม่จำเป็น
คำตอบสำหรับคำสั่งบรรทัดคำสั่งนี้เพื่อฆ่าคำสั่งโดยอัตโนมัติหลังจากระยะเวลาหนึ่ง เสนอวิธี 1 บรรทัดเพื่อหมดเวลาคำสั่งที่รันเป็นเวลานานจากบรรทัดคำสั่ง bash: ( /path/to/slow command with options ) & sleep 5 ; kill $! แต่เป็นไปได้ว่าคำสั่ง "ที่รันนาน" อาจเสร็จสิ้นเร็วกว่าการหมดเวลา (ลองเรียกมันว่าคำสั่ง "โดยปกติจะใช้เวลานาน แต่บางครั้งเร็ว" หรือคำสั่งtlrbsfเพื่อความสนุกสนาน) ดังนั้นวิธีการ 1 ซับที่ดีนี้มีปัญหาสองสามอย่าง อย่างแรกsleepคือไม่มีเงื่อนไขดังนั้นจึงกำหนดขอบเขตล่างที่ไม่พึงประสงค์ในเวลาที่ใช้เพื่อให้ลำดับเสร็จ พิจารณา 30s หรือ 2m หรือ 5m สำหรับการสลีปเมื่อคำสั่งtlrbsfเสร็จสิ้นใน 2 วินาที - ไม่พึงปรารถนาอย่างมาก ประการที่สองkillคือไม่มีเงื่อนไขดังนั้นลำดับนี้จะพยายามฆ่ากระบวนการที่ไม่ทำงานและสะอื้นเกี่ยวกับมัน ดังนั้น... มีวิธีการหมดเวลาคำสั่งโดยทั่วไปยาว - วิ่ง - แต่ - บางครั้ง - เร็ว …

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