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

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

12
วิธีใช้ sed / grep เพื่อแยกข้อความระหว่างสองคำ?
ฉันกำลังพยายามส่งออกสตริงที่มีทุกอย่างระหว่างสองคำของสตริง: การป้อนข้อมูล: "Here is a String" เอาท์พุท: "is a" โดยใช้: sed -n '/Here/,/String/p' มีจุดสิ้นสุด แต่ฉันไม่ต้องการรวมไว้
134 string  bash  sed  grep 


6
Bash script เพื่อตั้งค่าอุโมงค์ SSH ชั่วคราว
ใน Cygwin ฉันต้องการสคริปต์ Bash เพื่อ: สร้างอุโมงค์ SSH ไปยังเซิร์ฟเวอร์ระยะไกล ทำงานบางอย่างในพื้นที่ที่ใช้อุโมงค์ จากนั้นปิดอุโมงค์ ส่วนการปิดเครื่องทำให้ฉันงง ปัจจุบันฉันมีวิธีแก้ง่อย ในหนึ่งเชลล์ฉันเรียกใช้สิ่งต่อไปนี้เพื่อสร้างอุโมงค์: # Create the tunnel - this works! It runs forever, until the shell is quit. ssh -nNT -L 50000:localhost:3306 jm@sampledomain.com จากนั้นในหน้าต่างเชลล์อื่นฉันทำงานของฉัน: # Do some MySQL stuff over local port 50000 (which goes to remote port 3306) ในที่สุดเมื่อฉันทำเสร็จแล้วฉันก็ปิดหน้าต่างเชลล์แรกเพื่อฆ่าอุโมงค์ …
133 bash  ssh 

7
วิธีส่งอาร์กิวเมนต์ไปยัง Shell Script ผ่านนักเทียบท่าทำงาน
ฉันยังใหม่กับโลกของนักเทียบท่า ฉันต้องเรียกใช้เชลล์สคริปต์ที่รับอาร์กิวเมนต์บรรทัดคำสั่งผ่านคอนเทนเนอร์นักเทียบท่า ตัวอย่าง: เชลล์สคริปต์ของฉันมีลักษณะดังนี้: #!bin/bash echo $1 Dockerfile มีลักษณะดังนี้: FROM ubuntu:14.04 COPY ./file.sh / CMD /bin/bash file.sh ฉันไม่แน่ใจว่าจะส่งผ่านข้อโต้แย้งในขณะที่เรียกใช้คอนเทนเนอร์ได้อย่างไร

4
ไวยากรณ์หลายบรรทัดสำหรับการวางท่อ heredoc; พกพาได้ไหม
ฉันคุ้นเคยกับไวยากรณ์นี้: cmd1 << EOF | cmd2 text EOF แต่เพิ่งค้นพบว่า bash ช่วยให้ฉันเขียน: cmd1 << EOF | text EOF cmd2 (heredoc ใช้เป็นอินพุตไปยัง cmd1 และเอาต์พุตของ cmd1 จะถูกส่งไปยัง cmd2) นี่ดูเหมือนไวยากรณ์ที่แปลกมาก พกพาได้ไหม
132 bash  shell  pipe  sh  heredoc 

8
จะเรียกใช้. sh บนพรอมต์คำสั่งของ Windows ได้อย่างไร
ฉันจะเรียกใช้. sh บนพรอมต์คำสั่งของ Windows 7 ได้อย่างไร ฉันมักจะได้รับข้อผิดพลาดนี้เสมอเมื่อพยายามเรียกใช้บรรทัดนี้ app/build/build.sh ข้อผิดพลาด 'app' is not recognized... หรือ, bash app/build/build.sh ข้อผิดพลาด 'bash' is not recognized... มีความคิดอะไรที่ฉันพลาดไป? ที่นี่คว้าหน้าจอ
132 windows  bash  command-line  sh 

20
unix - หัวและส่วนท้ายของไฟล์
สมมติว่าคุณมีไฟล์ txt คำสั่งในการดู 10 บรรทัดบนสุดและ 10 บรรทัดล่างพร้อมกันคืออะไร? เช่นถ้าไฟล์มีความยาว 200 บรรทัดให้ดูบรรทัด 1-10 และ 190-200 ในครั้งเดียว
131 linux  bash  shell  unix  scripting 

9
ใช้ Expect ในสคริปต์ Bash เพื่อระบุรหัสผ่านสำหรับคำสั่ง SSH
ฉันพยายามใช้ Expect ในสคริปต์ Bash เพื่อระบุรหัสผ่าน SSH การให้รหัสผ่านใช้งานได้ แต่ฉันไม่ได้อยู่ในเซสชัน SSH เท่าที่ควร มันย้อนกลับไปสู่ ​​Bash สคริปต์ของฉัน: #!/bin/bash read -s PWD /usr/bin/expect <<EOD spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no usr@$myhost.example.com' expect "password" send "$PWD\n" EOD echo "you're out" ผลลัพธ์ของสคริปต์ของฉัน: spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no usr@$myhost.example.com usr@$myhost.example.com's password: you're out ฉันต้องการมีเซสชัน SSH ของฉันและเมื่อฉันออกเท่านั้นเพื่อกลับไปที่สคริปต์ Bash ของฉัน เหตุผลที่ฉันใช้ Bash before …
131 linux  bash  ssh  expect 

18
จะลบประวัติ 10 คำสั่งล่าสุดในเชลล์ได้อย่างไร
คำสั่งดังต่อไปนี้ 511 clear 512 history 513 history -d 505 514 history 515 history -d 507 510 513 516 history 517 history -d 509 518 history 519 history -d 511 520 history ฉันสามารถลบทีhistory -d 511ละคำสั่ง แต่จะลบ 10 คำสั่งสุดท้ายและระหว่าง 10 คำสั่งประวัติโดยใช้คำสั่งเดียวในเชลล์ได้อย่างไร เราสามารถเขียน bash script และดำเนินการลบประวัติได้หรือไม่?
131 linux  bash  shell  terminal 

11
จะกำหนดค่าบรรทัดคำสั่ง git bash ให้เสร็จได้อย่างไร
เช่นบนเครื่องอูบุนตูสดผมเคยทำงานเพียงและไม่มีการเสร็จสิ้นเมื่อพิมพ์เช่นsudo apt-get gitgit check[tab] ฉันไม่พบอะไรเลยในhttp://git-scm.com/docsแต่วันนี้การเติม IIRC รวมอยู่ในแพ็คเกจ git และฉันต้องการรายการที่ถูกต้องใน bashrc ของฉัน
131 git  bash 

4
ลบอักขระออกจากจุดสิ้นสุดของตัวแปร
การเติมข้อมูลอัตโนมัติของ Bash จะผนวก a / ท้ายชื่อไดเรกทอรี ฉันจะถอดสิ่งนี้ออกจากพารามิเตอร์ตำแหน่งได้อย่างไร #!/bin/sh target=$1 function backup(){ date=`date "+%y%m%d_%H%M%S"` PWD=`pwd` path=$PWD/$target tar czf /tmp/$date$target.tar.gz $path } backup
130 bash  shell 

7
อะไรคือความแตกต่างระหว่าง. bashrc, .bash_profile และ. environment?
ล็อค คำถามนี้และคำตอบถูกล็อกเนื่องจากคำถามไม่ตรงประเด็น แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ยังไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ฉันใช้ระบบที่ใช้ * nix ที่แตกต่างกันหลายปีและดูเหมือนว่าทุกรสชาติของ Bash ที่ฉันใช้จะมีอัลกอริทึมที่แตกต่างกันในการตัดสินใจว่าจะเรียกใช้สคริปต์เริ่มต้นใด สำหรับวัตถุประสงค์ของงานต่างๆเช่นการตั้งค่าตัวแปรสภาพแวดล้อมและนามแฝงและการพิมพ์ข้อความเริ่มต้น (เช่น MOTD) สคริปต์เริ่มต้นใดที่เหมาะสมในการทำสิ่งเหล่านี้ ความแตกต่างระหว่างการวางสิ่งที่อยู่ใน.bashrc, .bash_profileและ.environment? ผมเคยเห็นยังไฟล์อื่น ๆ เช่น.login, .bash_loginและ.profile; สิ่งเหล่านี้เคยเกี่ยวข้องหรือไม่ อะไรคือความแตกต่างในสิ่งที่เรียกใช้เมื่อเข้าสู่ระบบทางกายภาพเข้าสู่ระบบจากระยะไกลผ่าน ssh และเปิดหน้าต่างเทอร์มินัลใหม่ มีความแตกต่างอย่างมีนัยสำคัญระหว่างแพลตฟอร์ม (รวมถึง Mac OS X (และ Terminal.app) และ Cygwin Bash) หรือไม่
130 shell  environment  bash 

11
ทุบตีประวัติโดยไม่มีหมายเลขบรรทัด
historyคำสั่งทุบตีนั้นเจ๋งมาก ฉันเข้าใจว่าเหตุใดจึงแสดงหมายเลขบรรทัด แต่มีวิธีเรียกใช้คำสั่ง history และระงับหมายเลขบรรทัดหรือไม่ ประเด็นคือการใช้คำสั่ง history ดังนั้นโปรดอย่าตอบกลับ cat ~/.bash_history เอาท์พุทปัจจุบัน: 529 man history 530 ls 531 ll 532 clear 533 cd ~ 534 history แหล่งที่มาของกราฟิกในอดีต ผลลัพธ์ที่ต้องการ: man history ls ll clear cd ~ history แหล่งที่มาของกราฟิกในอดีต ขอบคุณทุกคนสำหรับวิธีแก้ปัญหาที่ยอดเยี่ยมของคุณ Paul เป็นวิธีที่ง่ายที่สุดและจะเหมาะกับฉันเพราะขนาดประวัติทุบตีของฉันตั้งไว้ที่ 2000 ฉันยังอยากแบ่งปันบทความดีๆที่ฉันพบเมื่อเช้านี้ มีตัวเลือกที่ดีสองสามตัวที่ตอนนี้ฉันใช้อยู่เช่นเก็บรายการที่ซ้ำกันออกจากประวัติทุบตีและตรวจสอบให้แน่ใจว่าเซสชันทุบตีหลายครั้งไม่ได้เขียนทับไฟล์ประวัติ: http://blog.macromates.com/2008/working-with -history ในทุบตี /
130 linux  bash 

5
โหลด. profile ใหม่ใน bash shell script (ใน unix)?
ฉันยังใหม่กับ bash shell scripting และเจอความท้าทาย ฉันรู้ว่าสามารถโหลดไฟล์ ".profile" ของฉันซ้ำได้โดยทำดังนี้ . .profile แต่ฉันพยายามดำเนินการแบบเดียวกันในสคริปต์ทุบตีที่ฉันเขียนและมันใช้งานไม่ได้ ความคิดใด ๆ ? มีอะไรอีกที่ฉันสามารถให้เพื่อชี้แจง? ขอบคุณ

4
วิธีค้นหาไฟล์ในไดเรกทอรีที่กำหนดและไม่สนใจไดเรกทอรีย่อยโดยใช้ bash
ฉันดูคำถามที่คล้ายกันอื่น ๆ แต่ไม่พบคำถามที่จะช่วยให้ฉันสามารถเข้าใจแนวคิดและทำให้ใช้ได้กับสถานการณ์ของฉันตามเวลาที่ จำกัด ฉันแค่เรียกใช้คำสั่ง find เพื่อค้นหาไฟล์บางไฟล์ แต่บางไฟล์ในไดเรกทอรีย่อยมีชื่อเดียวกันกับที่ฉันต้องการข้าม ขอบคุณสำหรับความช่วยเหลือใด ๆ ด้านล่างเป็นคำสั่งที่ฉันใช้: ไฟล์ / รูปแบบที่ฉันสนใจ: / dev / abc-scanner, / dev / abc-cash .... คำสั่ง: find /dev/ -name 'abc-*' สิ่งที่ถูกส่งคืน: /dev/abc-scanner /dev/abc-cash ... ... ... /dev/.udev/names/abc-scanner /dev/.udev/names/abc-cash ฉันต้องการละเว้นไฟล์หลัง: /dev/.udev / ...
129 bash  unix 

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