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

Bash เป็นเชลล์ฟรีสำหรับระบบปฏิบัติการยูนิกซ์จากโครงการ GNU

1
จำเป็นต้องเขียนสคริปต์ทุบตีที่จะคว้าทุกไฟล์วิดีโอในโฟลเดอร์และใช้การดำเนินการ ffmpeg กับพวกเขา
เป็นหลักแอปพลิเคชันชุดคำสั่งต่อไปนี้: ffmpeg -i "01.mkv" -map 0:a? -map 0:s? -map 0:v -c:v copy -c:a ac3 -c:s copy "test.mkv" ความหวังของฉันคือการเรียกใช้สิ่งนี้ในไดเรกทอรีและมีไฟล์ที่แก้ไขใหม่ทั้งหมดที่มีชื่อไฟล์เก่าและไฟล์เก่าที่ต่อท้ายด้วย "old_" หรือบางอย่างที่คล้ายกัน ฉันรู้ว่าไม่มีอะไรเกี่ยวกับ bash แต่มีประสบการณ์บางอย่างกับ c ++ และ java ดังนั้นคำศัพท์ไม่ใช่ปัญหาฉันเพิ่งไม่เคยดู bash มาก่อน ขอบคุณ! แก้ไข: เพื่อความชัดเจนฉันต้องการไฟล์ใหม่เป็น "01.mkv" และไฟล์เก่าที่จะเปลี่ยนชื่อเป็น "old_01.mkv" งานวิจัยของฉันบอกฉันว่าสิ่งนี้อาจต้องใช้เพ่งพิศ แต่ฉันรู้น้อยลงกว่าที่ฉันทุบตี แก้ไข 2: ฉันรู้ว่าฉันควรจะให้สิ่งที่ฉันสามารถรวบรวมมาด้วยตัวเองจนถึงขณะนี้ #!/bin/bash for i in $( ls ); do ffmpeg …
1 linux  bash 

3
แก้ไข bash_profile
ฉันพยายามที่จะเรียนรู้ทุบตี ฉันใช้อูบุนตู ฉันต้องการเพิ่มฟังก์ชั่น ฉันไม่แน่ใจว่าสภาพอากาศที่ฉันต้องสร้าง.profileหรือ.bash_profileไฟล์ดังนั้นฉันสร้างทั้งใน~/ไดเรกทอรี ฉันเพิ่มบางอย่างเช่นนี้ในแต่ละคน: myfunc() { echo "function ran" } ฉันออกจากระบบผู้ใช้ของฉันและเข้าสู่ระบบอีกครั้งฉันรันสิ่งนี้ในบรรทัดคำสั่ง: ฉัน @ host: ~ $ myfunc ซึ่งเพิ่งกลับมา: ไม่พบคำสั่ง myfunc ไม่แน่ใจว่าฉันทำอะไรผิด

2
เป็นกลุ่มเริ่มต้นที่จะบันทึกบัฟเฟอร์เมื่อได้รับสัญญาณ TERM
ฉันใช้ vim หลายอินสแตนซ์ ปัจจุบันฉันใช้ฟังก์ชั่นทุบตี kv(){ a=($(pgrep vim)); kill ${a[@]}; } เพื่อยุติอินสแตนซ์ที่เรียกใช้ทั้งหมดของ vim สิ่งนี้มีข้อเสียเปรียบในการออกจากไฟล์. swp ที่ไม่แน่นอนที่ใดก็ตามที่กลุ่มถูกฆ่าด้วยการเปลี่ยนแปลงที่ไม่ได้บันทึก มีวิธีตั้งค่ากลุ่มให้บันทึกบัฟเฟอร์ของมันหรือไม่ถ้ามันส่งสัญญาณ kill?
1 bash  vim 

2
สีเอาต์พุตพรอมต์ของ Bash จะเปลี่ยนไปหลังจากเอาท์พุท 2 บรรทัดแรก
ฉันปรับแต่ง bash PS1prompt ของฉันด้วยไฟล์ ~ / .bashrcนี้ ฉันไม่สามารถหาเหตุผลได้ว่าทำไมสีเอาต์พุตของฉันเปลี่ยนไปหลังจากเอาต์พุต 2 บรรทัดแรก ความคิดเห็นใดที่อาจเป็นสาเหตุของปัญหา
1 bash  shell  prompt 

1
วิธีเรียกใช้โปรแกรมใน git-bash.exe ในหน้าต่างใหม่
เมื่อฉันรันโปรแกรม/c/Users/PetrKrysl/AppData/Local/Julia-1.0.1/bin/julia.exeในgit-bash.exeหน้าต่างที่เปิดมันก็ทำงานได้ดี อย่างไรก็ตามฉันไม่สามารถเริ่มหน้าต่างใหม่ได้ git-bash.exe /c/Users/PetrKrysl/AppData/Local/Julia-1.0.1/bin/julia.exe หน้าต่างเปิดขึ้น แต่ไม่เปิดอยู่ มีข้อผิดพลาดบางประเภท แต่หน้าต่างหายไปเร็วเกินไปที่ฉันจะอ่านว่าเกิดอะไรขึ้น
1 windows  bash  git 

0
Cygwin และ Cygwin64 ไม่มีพรอมต์ในเทอร์มินัล
ฉันพยายามติดตั้งและติดตั้ง cygwin และ cygwin64 ใหม่ ฉันลองใช้ไซต์กระจกอื่น ๆ ด้วย แทนที่จะเห็นเส้นคล้ายuser@PC~ $ๆ กันฉันเห็นหน้าจอว่างด้วยเคอร์เซอร์กะพริบ คุณสมบัติของเทอร์มินัล cygwin ระบุเป้าหมาย: C:\cygwin\bin\mintty.exe -i /Cygwin-Terminal.ico - ฉันพยายามstty saneและได้รับข้อผิดพลาดต่อไปนี้: sh: ไม่สามารถรับโหมดอินพุตคอนโซล: หมายเลขอ้างอิงไม่ถูกต้อง sh: ไม่สามารถรับโหมดเอาต์พุตคอนโซล: หมายเลขอ้างอิงไม่ถูกต้อง sh: ไม่สามารถรับข้อมูลบัฟเฟอร์ของคอนโซล: หมายเลขอ้างอิงไม่ถูกต้อง sh: ไม่สามารถตั้งค่าโหมดคอนโซล: หมายเลขอ้างอิงไม่ถูกต้อง มีใครประสบปัญหานี้หรือไม่? คุณแก้ปัญหาอย่างไร

2
ปัญหาในการใช้งานที่กำหนดเวลาไว้เพื่อรันเชลล์สคริปต์ (Ubuntu Linux)
ฉันกำลังพยายามสร้างงานที่กำหนดเวลาไว้ซึ่งรันเชลล์สคริปต์ซ้ำและฉันมีปัญหาในการทำให้มันทำงานได้ ฉันให้คำสั่งต่อไปนี้เพื่อเรียกใช้ทุกนาที: ~/Desktop/foo/my_script แต่มันไม่เคยวิ่ง (คำสั่งนี้รันเชลล์สคริปต์ผ่านเทอร์มินัลไม่มีปัญหา) ความคิดใด ๆ ที่ฉันทำผิด ขอบคุณ! หมายเหตุ: นี่คือเชลล์สคริปต์ของฉัน: #!/bin/bash sleep 15 date >> output.txt { time ./foo > /dev/null ; } 2>> output.txt และนี่คือสาย cron: * * * * * /home/joe/Desktop/foo/my_script # JOB_ID_3

2
แท็บแบบสุ่มอัตโนมัติสมบูรณ์ในกรณีที่ชื่อไฟล์เหมือนกันเริ่มต้นหรือไม่
ให้บอกว่าฉันมีหลายไฟล์ในไดเรกทอรีซึ่งทั้งหมดเริ่มต้นด้วยสตริงเดียวกัน $ ls fileAA234 fileAA247 fileAA255 fileAA264 fileAA269 fileAA277 fileAA285 fileAA294 บ่อยครั้งที่เรียกดูไฟล์ข้อมูลดังกล่าวในบรรทัดคำสั่งฉันต้องการอ่านไฟล์เหล่านี้ทุกคนเพื่อดูว่ามีโครงสร้างอย่างไร แต่ถ้าฉันเข้า $ less f และจากนั้นกดแท็บเพื่อเสร็จสิ้นคำตอบจะเป็น $ less fileAA2 fileAA234 fileAA247 fileAA255 fileAA264 fileAA269 fileAA277 fileAA285 fileAA294 ซึ่งไม่ทำให้ฉันใกล้ถึงเปิดไฟล์ใดไฟล์หนึ่ง ดังนั้นสำหรับตอนนี้ฉันอาจใช้เมาส์เพื่อทำเครื่องหมายชื่อไฟล์แบบสุ่มและคัดลอกมาวางที่พรอมต์หรือฉันเอนไปข้างหน้าและให้ตาที่น่าสงสารของฉันหาสตริงที่ไม่ซ้ำกันเพื่อพิมพ์ชื่อไฟล์ให้เสร็จ เป็นวิธีที่ง่ายสำหรับพวกเขาหรือไม่ ฉันแค่คิดถึงอะไรบางอย่างที่ชัดเจนใช่มั้ย ฉันต้องการให้บางสิ่งบางอย่างเหมือนกับtab+enterการทำให้สมบูรณ์อัตโนมัติและเปิดไฟล์แรกในรายการเช่นในกรณีfileAA234นี้ ขอบคุณสำหรับความช่วยเหลือใด ๆ ผมคิดว่ามีวิธีการสร้างสคริปต์เปลือกโดยการรวมเครื่องมือบางอย่างเหมือนlsและheadแต่ฉันยังคงเริ่มต้นและยังไม่พบวิธีแก้ปัญหาตัวเองเลย

1
วิธีการฝังหลายไฟล์เสียงลงในไฟล์วิดีโอหนึ่งไฟล์ที่มีไทม์ไลน์ชดเชย
ฉันมีไฟล์วิดีโอ: screencast.mpg (100sec) และไฟล์เสียงหลายไฟล์ (ชื่อไฟล์บ่งบอกถึง offset): 10.wav (10sec) 30.wav (5sec) 45.wav (8sec) ฉันจะรวมไฟล์เหล่านั้นเข้าด้วยกันได้อย่างไร: V:|||||||||||||||||||||||||||||||||||||||||||||||||| A: ..... ... .... ฉันต้องการเขียนสคริปต์เพื่อทำงานนี้โดยอัตโนมัติ ฉันลองffmpeg -itsoffsetตัวเลือกแล้ว แต่ล้มเหลว
1 bash  ffmpeg  sox 

2
พิมพ์คำสั่งเรียกใช้โดยเชลล์
ฉันพยายามคัดลอกไฟล์ที่ไม่มีอยู่ในไดเรกทอรีหนึ่งไปยังไดเรกทอรีอื่นโดยใช้ awk diff -r dir1 dir2 | grep dir1 | awk '{$1=$2=$3 =""; print "cp \"./dir1/" substr($0,4) "\" ./dir2/"}' | sh ทำงานได้ดียกเว้นว่าฉันต้องการพิมพ์ไฟล์ที่กำลังคัดลอก สิ่งที่ต้องการcp ./dir1/file1.txt ./dir2/ในstdout ฉันจะทำสิ่งนี้ได้อย่างไร ฉันรู้ว่ามันง่าย แต่ฉันไม่สามารถเข้าใจได้ ฉันพยายามteeและechoคำสั่ง แต่ไร้ประโยชน์
1 linux  bash  shell  awk 

2
รันคำสั่ง sed โดยไม่ตั้งใจตัวเลือกที่ไม่รู้จักเพื่อ `s 'หมายถึงไม่มีการทดแทนเกิดขึ้น
ฉันเผลอรันคำสั่ง sed: find ./ -type f -exec sed -i 's/http:\/\/i.po.st\/static\/v3\/img\/set-24.png/https:\/\/i.po.st\/static/v3/img/set-24.png/gI' {} \; ก่อนที่ฉันจะหลบหนี / มันผิดพลาด: sed: -e expression #1, char 75: unknown option to `s' sed: -e expression #1, char 75: unknown option to `s' ดังนั้นจึงไม่มีการทดแทนแปลก ๆ เกิดขึ้นใช่ไหม
1 linux  bash  sed 

6
จับคู่สตริงใน awk
ฉันจะค้นหาไฟล์เพื่อค้นหาบรรทัดที่มี SRC = ได้จากที่นี่ได้อย่างไร ฉันหมายถึงฉันจะหาที่อยู่ IP ต้นทางในไฟล์นี้โดยใช้ awk ได้อย่างไร Mar 10 03:17:12 ubuntu kernel: [11045.721649] Type=ScanXMASIN=eth0 OUT= MAC=00:0c:29:a1:51:1c:00:0c:29:23:9d:e4:08:00 SRC=192.168.1.28 DST=192.168.1.27 LEN=40 TOS=0x00 PREC=0x00 TTL=47 ID=6603 PROTO=TCP SPT=47301 DPT=53 WINDOW=1024 RES=0x00 URG PSH FIN URGP=0 Mar 10 03:17:12 ubuntu kernel: [11045.721702] Type=ScanXMASIN=eth0 OUT= MAC=00:0c:29:a1:51:1c:00:0c:29:23:9d:e4:08:00 SRC=192.168.1.30 DST=192.168.1.27 LEN=40 TOS=0x00 PREC=0x00 TTL=42 ID=6802 …
1 bash  shell  awk 

1
วิธีเพิ่ม bash-completion ใน www-data ของผู้ใช้?
เมื่อเข้าสู่ระบบในฐานะผู้ใช้ 'www-data' บนเซิร์ฟเวอร์เดเบียนของฉัน (บีบ) ฉันต้องการใช้ทุบตีเสร็จ ฉันอ่านคู่มือนี้แล้ว แต่ไม่ประสบความสำเร็จ: มันใช้ได้กับผู้ใช้ทั่วไปทุกคน แต่ไม่ใช่สำหรับ www-data! เกิดอะไรขึ้น
1 linux  bash  debian 

0
วิธีการ ssh, เริ่มต้นด้านบน, และปิดเซสชัน ssh ด้วย ~ / .toprc แบบกำหนดเอง
ถ้าฉันล็อกอินเข้าสู่รีโมตโฮสต์ของฉันผ่าน ssh และรันบนสุดมันจะเลือกไฟล์การกำหนดค่า ~ / .toprc ฉันยังสามารถรันคำสั่งต่อไปนี้ได้สำเร็จ ssh -t <user>@<host> "top -b > top.dat" อย่างไรก็ตามสิ่งนี้ทำให้เซสชัน ssh เปิดตลอดไป ฉันต้องการใช้เซสชัน ssh เพื่อเริ่มกระบวนการ batch สูงสุดและออกจากเซสชัน ssh ปัญหาที่ฉันมีคือทุกสิ่งที่ฉันพยายามอย่างใดอย่างหนึ่งไม่ทำงานหรือไม่ได้รับไฟล์การตั้งค่า ~ / .toprc นี่คือสิ่งที่ฉันได้ลอง: ssh <user>@<host> "top -b > top.dat &" ssh -f <user>@<host> "top -b > top.dat" ssh -f <user>@<host> "nohup top -b > top.dat …
1 bash  ssh  top  nohup 

1
ฉันจะปิดการใช้งานความสามารถในการพิมพ์คำสั่ง `git commit` ใน bash shell ได้อย่างไร?
tl; dr: มีวิธีให้เปลือกของฉันปฏิเสธสิ่งที่ฉันพิมพ์ที่ขึ้นต้นด้วยgit commitหรือไม่? มันจะช่วยให้ฉันสามารถเรียกใช้สคริปต์ด้วยgit commitในพวกเขา แต่ไม่อนุญาตให้ฉันพิมพ์คำสั่งใด ๆ ที่จะเริ่มต้นด้วยคำนำหน้าว่า ข้อมูลเพิ่มเติม: ทีมของฉันใช้gitสำหรับการควบคุมแหล่งรวมทั้งแพคเกจนี้ที่เรียกว่าCommitizenที่ให้การเปลี่ยนแฟนซี / การสลับอัตโนมัติในประวัติการกระทำเมื่อใช้git czคำสั่ง อย่างไรก็ตามgit commitยังคงใช้งานได้ ปัญหานี้เป็นปัญหาสำหรับฉันเพราะฉันมีนิสัยชอบใช้เครื่องเก่าgit commitๆ
1 bash  git 

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