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

คำถามเฉพาะของ Bourne อีกครั้งของเชลล์ใน GNU เมื่อเทียบกับเชลล์ Bourne / POSIX อื่น ๆ สำหรับคำถามเกี่ยวกับเชลล์ Unix โดยทั่วไปให้ใช้ / เชลล์แท็กแทน

2
ฉันจะเปลี่ยนเส้นทาง stderr เท่านั้นได้อย่างไร
ฉันมีปัญหาเล็กน้อยในการทำเช่นนี้ ฉันต้องเรียกใช้ไฟล์. java ที่คอมไพล์แล้วและเปลี่ยนเส้นทางเฉพาะ stderr ไปยังไฟล์ที่เรียกว่าข้อผิดพลาด ดังนั้นไฟล์. java จึงมีชื่อว่า javaProgram.java นี่คือสิ่งที่ฉันได้ลอง: java javaProgram 2> error อย่างไรก็ตามเมื่อฉัน cat error ปรากฏว่ามีสิ่งต่าง ๆ อยู่ในนั้นแม้ว่าฉันจะรู้ว่าไฟล์. java เฉพาะนั้นไม่มีข้อผิดพลาดก็ตาม ฉันกำลังทำอะไรผิดหรือเปล่า? สิ่งที่ฉันต้องการให้ไฟล์แสดงข้อผิดพลาดนี้เป็นข้อผิดพลาดไม่ใช่อย่างอื่น

3
วิธีการพอร์ตไปยังสไตล์ทุบตีเพื่อเถ้า?
ashบางเวลาที่ผ่านมาฉันได้เขียนสคริปต์ทุบตีซึ่งขณะนี้ควรจะสามารถที่จะทำงานในสภาพแวดล้อมที่มี ในbashมันเป็นเหมือน: services=( "service1.service" "service2.service" "service3.service" ) for service in "${services[@]}" do START $service done START() { echo "Starting "$1 systemctl start $1 } ในความเป็นจริงมีบริการอยู่ 40 รายการและฉันต้องการทำให้การเปลี่ยนแปลงนี้ไม่เจ็บปวดและสะอาดเท่าที่จะเป็นไปได้ มีการใช้bashisms เสมอ ตอนนี้ฉันกำลังเหน็บแนมกับงานเพื่อให้สคริปต์พกพาได้มากขึ้น สำหรับเหตุผลในการพกพาอาจเป็นเรื่องดีที่จะมีashโซลูชันที่บริสุทธิ์ แต่เนื่องจากฉันมีความแข็งแกร่งbusyboxในการจัดการของฉันฉันอาจเสียสละบางพกพา เฉพาะในกรณีที่ความสามารถในการอ่านดีขึ้นมากเนื่องจากสคริปต์ "clean" เป็นเมตริกเช่นกัน ในกรณีนี้โซลูชันแบบพกพาและสะอาดจะเป็นอย่างไร
13 bash  shell  array  ash 

4
แสดงสปินเนอร์ขณะที่รอให้กระบวนการเสร็จสิ้น
ฉันจะแสดงสปินเนอร์จนจบบรรทัดคำสั่งได้หรือไม่ กล่าวอีกนัยหนึ่งถ้าฉันใช้งานสคริปต์และฉันต้องการที่จะแสดงสปินเนอร์ในขณะที่สคริปต์นี้ทำงานและสปินเนอร์หายไปเมื่อสคริปต์เสร็จมันเป็นงาน ร้องเป็นรหัสปั่นด้ายที่พบบ่อย: i=1 sp="/-\|" echo -n ' ' while true do printf "\b${sp:i++%${#sp}:1}" done ฉันจะเชื่อมโยงรหัสสปินเนอร์ก่อนหน้าเข้ากับคำสั่งเพื่อให้มันแสดงสปินเนอร์ได้ในขณะที่คำสั่งนั้นทำงานอยู่และสปินเนอร์จะหายไปเมื่อคำสั่งทำงานเสร็จ ถ้าฉันรวมคำสั่งในลูปมันจะวนซ้ำกับสปินเนอร์ดังนั้นวิธีแก้ปัญหาในกรณีนี้คืออะไร?
13 bash 


2
ฉันจะรันคำสั่งบนหลายไฟล์ได้อย่างไร
นี่เป็นพื้นฐานที่ค่อนข้างฉันมีโฟลเดอร์ที่มีโฟลเดอร์ย่อยหลายไฟล์ของ JS และฉันต้องการเรียกใช้คอมไพเลอร์ Clojure ของ Google ในไฟล์ทั้งหมดในโฟลเดอร์เหล่านั้น คำสั่งในการประมวลผลไฟล์เดียวมีดังนี้: java -jar compiler.jar --js filename.js --js_output_file newfilename.js ฉันจะแก้ไขสิ่งนี้ให้ทำงานกับทุกไฟล์ JS ในโครงสร้างไดเรกทอรีของฉันได้อย่างไร

4
สคริปต์ Bash รอกระบวนการและรับรหัสส่งคืน
ฉันพยายามสร้างสคริปต์ซึ่งจะเริ่มคำสั่งพื้นหลังจำนวนมาก สำหรับแต่ละคำสั่งพื้นหลังฉันต้องได้รับรหัสส่งคืน ฉันลองใช้สคริปต์ต่อไปนี้แล้ว: #!/bin/bash set -x pid=() return=() for i in 1 2 do echo start $i ssh mysql "/root/test$i.sh" & pid[$i]=$! done for i in ${#pid[@]} do echo ${pid[$i]} wait ${pid[$i]} return[$i]=$? if [ ${return[$i]} -ne 0 ] then echo mail error fi done echo ${return[1]} echo ${return[2]} ปัญหาของฉันอยู่ระหว่างการรอลูปถ้า …
13 linux  bash  process  array 

4
ฉันจะรู้ที่อยู่ IP ของผู้ใช้รายอื่นที่เข้าสู่ระบบที่เครื่องระยะไกลเดียวกันได้อย่างไร
ฉันสามารถดูชื่อของผู้ใช้อื่น ๆ ในเครื่องระยะไกลด้วยwhoคำสั่ง ... ฉันต้องการทราบที่อยู่ IP ของผู้ใช้เหล่านั้น ... ฉันลองใช้คำสั่ง/sbin/ifconfingแล้วnetstatแต่ไม่สามารถรับผลลัพธ์ในเชิงบวก ... ฉันต้องการโซลูชันนี้ที่เข้ากันได้กับ Linux และ Unix ... มีคำสั่งสำหรับยูทิลิตีนั้นหรือไม่? ฉันจำเป็นต้องเขียนสคริปต์หรือใช้ไพพ์หรือไม่?

3
รับ ls เพื่อแสดงรายการไดเร็กตอรี่ด้วยเครื่องหมายสแลชต่อท้ายได้อย่างไร?
bashเปลือกของฉันคือ ฉันจะได้รับผลลัพธ์ของlsการแสดงไดเรกทอรีที่มีเครื่องหมายสแลชต่อท้ายได้อย่างไร? เมื่อฉันทำlsในtcshจะให้ผลลัพธ์ที่ต้องการ ฉันจะทำให้เรื่องนี้เกิดขึ้นได้อย่างไรbashโดยไม่ใช้ข้อโต้แย้งใด ๆ เช่น. bin/ lib/ src/ file1.txt file2.txt
13 bash  directory  ls 

2
การแสดงออกปกติในสคริปต์ทุบตี
นี่เป็นครั้งแรกของฉันที่สคริปต์ทุบตีดังนั้นฉันอาจทำผิดพลาดง่าย โดยทั่วไปฉันพยายามเขียนสคริปต์ที่ได้รับกลุ่มของผู้ใช้และหากพวกเขาอยู่ในกลุ่มที่แน่นอนก็จะเข้าสู่ระบบตามนั้น เห็นได้ชัดว่ามีฟังก์ชั่นเพิ่มเติม แต่ไม่มีจุดที่สร้างเมื่อฉันไม่สามารถใช้ regex ได้! จนถึงตอนนี้ฉันมีสิ่งนี้: #!/bin/bash regex="^([a-zA-Z0-9\-_]+ : [a-zA-Z0-9\-_]+) (usergroup)$" # example output groups="username : username usergroup" echo "$groups" >> /home/jrdn/log if [[ "$groups" =~ $regex ]]; then echo "Match!" >> /home/jrdn/log else echo "No match" >> /home/jrdn/log fi ทุกที่ที่ฉันลอง regex มันใช้งานได้ แต่ในสคริปต์ทุบตีมันเท่านั้นที่เคยออกผลลัพธ์เป็นตามด้วย$groups No matchดังนั้นใครบางคนสามารถบอกฉันว่ามีอะไรผิดปกติกับมัน?

2
พารามิเตอร์การโทรที่ถูกผูกมัดกับโปรแกรมอรรถประโยชน์ใน Bash
ฉันมีโปรแกรมยูนิกซ์กล่องดำที่ใช้ใน Bash shell ที่อ่านคอลัมน์ข้อมูลจาก stdin ประมวลผลพวกมัน (ใช้เอฟเฟกต์การปรับให้เรียบ) จากนั้นก็ส่งออกไปยัง stdout ฉันใช้มันโดย UNIX ไพพ์เช่น generate | smooth | plot สำหรับการปรับให้เรียบมากขึ้นฉันสามารถทำซ้ำแบบราบรื่นได้ดังนั้นจึงสามารถเรียกใช้จากบรรทัดคำสั่ง Bash เป็น generate | smooth | smooth | plot หรือแม้กระทั่ง generate | smooth | smooth | smooth | smooth | smooth | smooth | smooth | smooth | smooth | smooth | …

4
วิธีการแยกสตริงในสองสตริงย่อยที่มีความยาวเท่ากันโดยใช้ bash
ฉันต้องการแยกสตริงออกเป็นสองส่วนและพิมพ์ตามลำดับ ตัวอย่างเช่น: abcdef เข้าไป abc def มีวิธีง่าย ๆ ที่จะทำหรือต้องการการประมวลผลสตริง?
12 bash  string 

2
ออกจากเชลล์ด้วยทางลัด (ไม่พิมพ์ exit) ซึ่งปิดเซสชันอย่างถูกต้อง
ฉันใช้คำสั่ง ProxyJump สำหรับจำนวนเซสชัน ssh ที่ฉันใช้ทุกวันและสลับผู้ใช้จำนวนมากบนเซสชันเหล่านี้และต้องพิมพ์exit3 หรือ 4 ครั้งในแถวไม่สนุกเกินไป ฉันรู้ว่าnewline+ ~+ .เพื่อยุติเซสชัน ssh ฉันยังต้องตรวจสอบว่ามันจบลงด้วยความเป็นมิตรexitแต่คุณจะออกจากเซสชันทั้งหมดในเชลล์ปัจจุบันด้วยคำสั่งเดียวหรือทางลัดเช่นพิมพ์exit3 หรือ 4 ครั้งได้อย่างไร ในกรณีของฉันกลายเป็นสิ่งที่ครั้งเดียว?
12 bash  shell  session 


3
ทำไม“ cat {foo}” ไม่ส่งออก foo แต่“ cat {foo, bar}” ทำเช่นนั้น
ฉันพยายามเชื่อมไฟล์ข้อความในโฟลเดอร์ย่อยและพยายาม: cat ./{mainfolder1,mainfolder2,mainfolder3}/{subfolder1}/book.txt > out$var อย่างไรก็ตามสิ่งนี้ไม่ได้ส่งคืนสิ่งใด ดังนั้นลองเพิ่ม 'subfolder2' ที่ไม่มีอยู่ cat ./{mainfolder1,mainfolder2,mainfolder3}/{subfolder1,subfolder2}/book.txt > out$var และในครั้งนี้มันได้ผลโดยทำการต่อไฟล์เข้าด้วยกัน ทำไมสิ่งนี้เกิดขึ้น

3
Bash brace expansion หลังพา ธ สแลช
ฉันกำลังพยายามคัดลอกไฟล์ไปยังชื่ออื่นในไดเรกทอรีเดียวกันโดยใช้การขยายรั้ง ฉันใช้ bash 4.4.18 นี่คือสิ่งที่ฉันทำ: cp ~/some/dir/{my-file-to-rename.bin, new-name-of-file.bin} แต่ฉันได้รับข้อผิดพลาดนี้: cp: cannot stat '/home/xyz/some/dir/{my-file-to-rename.bin,': No such file or directory แม้แต่การขยายรั้งอย่างง่ายเช่นนี้ก็ทำให้ฉันมีข้อผิดพลาดเดียวกัน cp {my-file-to-rename.bin, new-name-of-file.bin} ผมทำอะไรผิดหรือเปล่า?

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