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

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

6
การใช้เครื่องหมายอัศเจรีย์ในข้อความคอมมิต Git ผ่านบรรทัดคำสั่ง
ฉันจะใส่เครื่องหมายอัศเจรีย์ลงในข้อความคอมมิท Git จากบรรทัดคำสั่งได้อย่างไร เป็นไปได้ที่จะหลีกเลี่ยงเครื่องหมายอัศเจรีย์ด้วยแบ็กสแลช แต่จากนั้นแบ็กสแลชจะสิ้นสุดลงในข้อความคอมมิทเช่นกัน ฉันต้องการสิ่งนี้: git commit -am "Nailed it!"
152 git  bash 

10
วิธีการเรียกใช้สองคำสั่งใน sudo
มีวิธีใดบ้างที่ฉันจะเรียกใช้คำสั่ง Db2 สองคำสั่งจากบรรทัดคำสั่งได้? (พวกเขาจะถูกเรียกจากexecคำสั่งPHP ) db2 connect to ttt (โปรดทราบว่าเราจำเป็นต้องมีการเชื่อมต่ออยู่สำหรับคำสั่งที่สอง db2 UPDATE CONTACT SET EMAIL_ADDRESS = 'mytestaccount@gmail.com' ฉันลองสิ่งนี้: sudo -su db2inst1 db2 connect to ttt; db2 UPDATE CONTACT SET EMAIL_ADDRESS = 'mytestaccount@gmail.com' คำสั่งแรกดำเนินการอย่างถูกต้อง แต่คำสั่งที่สองล้มเหลวพร้อมกับข้อความแสดงข้อผิดพลาด SQL1024N A database connection does not exist. SQLSTATE=08003 โปรดทราบว่าฉันต้องเรียกใช้สิ่งนี้ในฐานะผู้ใช้ php คำสั่งsudo -u db2inst1 idในฐานะผู้ใช้phpให้ผลลัพธ์ที่ถูกต้องแก่ฉัน
152 bash  sudo 

7
วิธีการประมวลผลแต่ละบรรทัดที่ได้รับจากคำสั่ง grep
ฉันมีจำนวนบรรทัดที่ดึงมาจากไฟล์หลังจากรันคำสั่งgrepดังนี้: var=`grep xyz abc.txt` สมมติว่าฉันได้ 10 บรรทัดซึ่งประกอบด้วย xyz เป็นผลลัพธ์ ตอนนี้ฉันต้องประมวลผลแต่ละบรรทัดที่ฉันได้รับจากคำสั่ง grep ฉันจะดำเนินการสิ่งนี้ได้อย่างไร
152 bash  shell  grep 

13
วิธีการแสดงกล่องข้อความ GUI จากสคริปต์ทุบตีใน linux?
ฉันกำลังเขียนสคริปต์ทุบตีเล็กน้อยภายใต้ Ubuntu linux ฉันต้องการที่จะเรียกใช้พวกเขาจาก GUI โดยไม่ต้องใช้หน้าต่างเทอร์มินัลเพื่อป้อนอินพุตหรือดูเอาต์พุตใด ๆ จนถึงตอนนี้อินพุตที่จำเป็นเท่านั้นคือรหัสผ่านสำหรับ sudo - และ gksudo จัดการได้ดี แต่ฉันยังไม่พบวิธีที่ง่ายในการแสดงกล่องข้อความ มีคำสั่ง 'gkmessage' บ้างไหม? ฉันต้องการบางสิ่งบางอย่างในการติดตั้งเริ่มต้นของ Ubuntu แต่ฉันไม่รังเกียจที่จะติดตั้งแพ็คเกจใหม่หากจำเป็น
152 linux  bash  scripting  ubuntu  gtk 

7
เรียกใช้สตริงเป็นคำสั่งภายในสคริปต์ Bash
ฉันมีสคริปต์ Bash ที่สร้างสตริงเพื่อทำงานเป็นคำสั่ง สคริปต์: #! /bin/bash matchdir="/home/joao/robocup/runner_workdir/matches/testmatch/" teamAComm="`pwd`/a.sh" teamBComm="`pwd`/b.sh" include="`pwd`/server_official.conf" serverbin='/usr/local/bin/rcssserver' cd $matchdir illcommando="$serverbin include='$include' server::team_l_start = '${teamAComm}' server::team_r_start = '${teamBComm}' CSVSaver::save='true' CSVSaver::filename = 'out.csv'" echo "running: $illcommando" # $illcommando > server-output.log 2> server-error.log $illcommando $serverbinซึ่งดูเหมือนจะไม่จัดหาข้อโต้แย้งได้อย่างถูกต้องไป เอาต์พุตสคริปต์: running: /usr/local/bin/rcssserver include='/home/joao/robocup/runner_workdir/server_official.conf' server::team_l_start = '/home/joao/robocup/runner_workdir/a.sh' server::team_r_start = '/home/joao/robocup/runner_workdir/b.sh' CSVSaver::save='true' CSVSaver::filename = 'out.csv' …

9
วิธีอ้างอิงไฟล์สำหรับตัวแปรที่ใช้ Bash
ฉันต้องการเรียกไฟล์การตั้งค่าสำหรับตัวแปรฉันจะทำสิ่งนี้ใน bash ได้อย่างไร? ดังนั้นไฟล์การตั้งค่าจะกำหนดตัวแปร (เช่น: CONFIG.FILE): production="liveschool_joe" playschool="playschool_joe" และสคริปต์จะใช้ตัวแปรเหล่านั้นในนั้น #!/bin/bash production="/REFERENCE/TO/CONFIG.FILE" playschool="/REFERENCE/TO/CONFIG.FILE" sudo -u wwwrun svn up /srv/www/htdocs/$production sudo -u wwwrun svn up /srv/www/htdocs/$playschool ฉันจะทุบตีเพื่อทำสิ่งนั้นได้อย่างไร ฉันจะต้องใช้ awk / sed ฯลฯ หรือไม่?

9
วิธีการแทนที่ทั้งบรรทัดในไฟล์ข้อความด้วยหมายเลขบรรทัด
ฉันมีสถานการณ์ที่ฉันต้องการสคริปต์ทุบตีเพื่อแทนที่บรรทัดทั้งหมดในไฟล์ หมายเลขบรรทัดจะเหมือนกันเสมอดังนั้นอาจเป็นตัวแปรแบบตายตัว ฉันไม่ได้พยายามที่จะแทนที่สตริงย่อยบางส่วนในบรรทัดนั้นฉันแค่ต้องการแทนที่บรรทัดนั้นด้วยบรรทัดใหม่ทั้งหมด มีวิธีทุบตีสำหรับทำสิ่งนี้ (หรือสิ่งที่ง่ายที่สามารถโยนลงในสคริปต์. sh)
152 bash  text  replace  sed 


12
จะบอกได้อย่างไรว่าสตริงไม่ได้ถูกกำหนดไว้ในสคริปต์เชลล์ Bash
ถ้าฉันต้องการตรวจสอบสตริงว่างฉันจะทำ [ -z $mystr ] แต่ถ้าฉันต้องการตรวจสอบว่าตัวแปรได้ถูกกำหนดเลย หรือไม่มีความแตกต่างในการเขียนสคริปต์ Bash?
151 bash  shell  scripting  string  null 

4
ทุบตีถ้า [เท็จ]; ผลตอบแทนจริง
รับการเรียนรู้ทุบตีในสัปดาห์นี้และวิ่งเข้าไปในอุปสรรค์ #!/bin/sh if [ false ]; then echo "True" else echo "False" fi สิ่งนี้จะออกจริงทุกครั้งแม้ว่าเงื่อนไขจะดูเหมือนจะบ่งบอกเป็นอย่างอื่น หากฉันถอดขายึดออก[]แล้วก็ใช้งานได้ แต่ฉันไม่เข้าใจว่าทำไม

21
วิธีการรวมทุกสองบรรทัดเป็นหนึ่งเดียวจากบรรทัดคำสั่ง?
ฉันมีไฟล์ข้อความที่มีรูปแบบดังต่อไปนี้ บรรทัดแรกคือ "KEY" และบรรทัดที่สองคือ "VALUE" KEY 4048:1736 string 3 KEY 0:1772 string 1 KEY 4192:1349 string 1 KEY 7329:2407 string 2 KEY 0:1774 string 1 ฉันต้องการค่าในบรรทัดเดียวกับคีย์ ดังนั้นผลลัพธ์ควรมีลักษณะเช่นนี้ ... KEY 4048:1736 string 3 KEY 0:1772 string 1 KEY 4192:1349 string 1 KEY 7329:2407 string 2 KEY 0:1774 string 1 มันจะดีกว่าถ้าฉันสามารถใช้ตัวคั่นบางตัวเช่น$หรือ,: KEY …
151 bash  awk  sed  grep 

4
ฉันจะดึงข้อมูลบรรทัดก่อน / หลังผลลัพธ์ grep เป็น bash ได้อย่างไร
สวัสดีฉันยังใหม่กับการเขียนโปรแกรมทุบตี ฉันต้องการวิธีการค้นหาในข้อความที่กำหนด เพื่อที่ฉันใช้grepฟังก์ชั่น: grep -i "my_regex" ที่ได้ผล แต่ให้สิ่งdataนี้: This is the test data This is the error data as follows . . . . . . . . . . . . . . . . . . . . . . Error data ends เมื่อฉันพบคำerror(ใช้grep -i error data) ฉันต้องการค้นหา …
151 bash  shell  ubuntu 

5
การสร้างไฟล์ชั่วคราวในทุบตี
มีวิธีที่ดีกว่าในการสร้างไฟล์ชั่วคราวในสคริปต์ทุบตีหรือไม่? ปกติฉันแค่ตั้งชื่อสิ่งที่อยู่ในใจของฉันเช่น tempfile-123 เพราะมันจะถูกลบเมื่อสคริปต์จบ มีข้อเสียในการทำเช่นนี้นอกเหนือจากการเขียนทับ tempfile-123 ที่เป็นไปได้ในโฟลเดอร์ปัจจุบันหรือไม่? หรือมีข้อได้เปรียบใด ๆ ในการสร้างไฟล์ชั่วคราวอย่างระมัดระวังมากขึ้น?
150 linux  bash  unix 

10
ทุบตีอาร์เรย์ที่มีช่องว่างในองค์ประกอบ
ฉันพยายามสร้างอาร์เรย์ด้วยการทุบตีชื่อไฟล์จากกล้องของฉัน: FILES=(2011-09-04 21.43.02.jpg 2011-09-05 10.23.14.jpg 2011-09-09 12.31.16.jpg 2011-09-11 08.43.12.jpg) อย่างที่คุณเห็นมีช่องว่างตรงกลางของชื่อไฟล์แต่ละไฟล์ ฉันพยายามห่อแต่ละชื่อด้วยเครื่องหมายอัญประกาศและหนีช่องว่างด้วยแบ็กสแลชซึ่งไม่ได้ผล เมื่อฉันพยายามเข้าถึงองค์ประกอบอาร์เรย์มันจะยังคงรักษาพื้นที่ในฐานะองค์ประกอบองค์ประกอบ ฉันจะจับชื่อไฟล์อย่างถูกต้องด้วยช่องว่างภายในชื่อได้อย่างไร
150 arrays  bash  unix  scripting 

2
วิธีการแยกออกจากวงใน Bash?
ฉันต้องการเขียนสคริปต์ Bash เพื่อประมวลผลข้อความซึ่งอาจต้องใช้ขณะที่ลูป ตัวอย่างเช่น a while loop ใน C: int done = 0; while(1) { ... if(done) break; } ฉันต้องการเขียนสคริปต์ Bash ที่เทียบเท่า แต่สิ่งที่ฉันมักจะใช้และเป็นตัวอย่างคลาสสิกทั้งหมดที่ฉันอ่านได้แสดงให้เห็นคือ: while read something; do ... done มันไม่มีความช่วยเหลือเกี่ยวกับวิธีการทำwhile(1){}และbreak;สิ่งที่กำหนดไว้อย่างดีและใช้กันอย่างแพร่หลายใน C และฉันไม่ต้องอ่านข้อมูลสำหรับ stdin ใครสามารถช่วยฉันด้วย Bash เทียบเท่ากับรหัส C ข้างต้น?
150 bash  shell  while-loop 

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