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

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


12
วิธีการส่งออกสี diff?
ฉันต้องการฟอร์แมตไฟล์ Unix แบบมีเงื่อนไขตอนนี้ฉันกำลังทำงานกับdiffคำสั่งและต้องการทราบว่าเป็นไปได้หรือไม่ที่จะจัดรูปแบบข้อความของdiffเอาต์พุตคำสั่ง ตัวอย่าง: ค่าที่ตรงกันควรแสดงเป็นสีเขียว ค่าที่ไม่ตรงกันควรแสดงเป็นสีแดง สมมติว่าฉันมีสองไฟล์file1และคำสั่งของฉันคือfile2diff file1 file2 ตอนนี้ฉันต้องการที่สมมติว่าผลลัพธ์มี 5 ไม่ตรงกันจากนั้นไม่ตรงกันเหล่านั้นควรจะแสดงในสีแดง วิธีการบรรลุสิ่งนี้โดยใช้ยูนิกซ์? ในระยะสั้น "เปลี่ยนสีเป็นสีแดงสำหรับผลลัพธ์ของคำสั่ง diff สำหรับค่าที่ไม่ตรงกัน"
18 bash  ksh  diff 

3
การตั้งค่าเอาต์พุต jq เป็น Bash Variable
ฉันใช้ curl เพื่อให้ JSON กลับมาจาก api ที่เหลือเช่นนี้ content=$(curl -s -X GET -H "Header:Value" http://127.0.0.1:8200/etc) echo "${content}"| jq -r '.data.value' ซึ่งสร้างคุณค่าที่ฉันต้องการ อย่างไรก็ตาม; เมื่อฉันเปลี่ยนโค้ดด้านบนให้มีลักษณะดังนี้: content=$(curl -s -X GET -H "Header:Value" http://127.0.0.1:8200/etc) username=$(echo "${content}"| jq -r '.data.value') echo $username ไม่ได้ผลิตอะไรเลย ฉันจะเปลี่ยนสิ่งนี้ได้อย่างไรเพื่อให้ตัวแปรชื่อผู้ใช้ได้รับการกำหนดผลลัพธ์
18 bash  curl  json  jq 

1
String `! 23` ถูกแทนที่ด้วย` docker 'ในบรรทัดคำสั่ง
ฉันมีคำสั่ง Maven พร้อมพารามิเตอร์: mvn test -Dcommon_password=!23foo คำสั่งนี้จะถูกดำเนินการเป็น mvn test -Dcommon_password=dockerfoo คือจะถูกแทนที่ด้วย!23 dockerเหตุใดสิ่งนี้จึงเกิดขึ้นและฉันจะหลีกเลี่ยงได้อย่างไร
17 bash 

2
ความแตกต่างระหว่างคำสั่ง builtin cd และ cd คืออะไร?
builtin cdผมพบคำสั่งลินุกซ์ ความแตกต่างระหว่างคำสั่งbuiltin cdและcdคืออะไร? ที่จริงแล้วฉันได้ทำการวิจัยเกี่ยวกับความแตกต่าง แต่ฉันไม่สามารถหาคำอธิบายที่น่าทึ่งและมีนัยสำคัญเกี่ยวกับเรื่องนี้
17 bash  shell  cd-command 

2
การดำเนินการประเภทใด / # / - ใน“ $ {my_array [@] / # / -}”?
คำตอบที่ได้รับการยอมรับในการแปลงอาร์เรย์เป็นอาร์กิวเมนต์ของคำสั่ง? ใช้คำสั่ง Bash ต่อไปนี้: command "${my_array[@]/#/-}" "$1" ฉันพยายามที่จะคิดออกว่า/#/-ส่วนทำอย่างไร น่าเสียดายที่ฉันไม่รู้จะเรียกมันว่าอะไรดังนั้นฉันมีปัญหาในการค้นหาเอกสารใด ๆ ฉันดูในหน้า Bash man page ในอาร์เรย์และเว็บไซต์ไม่กี่แห่ง แต่ไม่พบอะไรเลย
17 bash  array 

1
ชื่อฟังก์ชันสคริปต์ Bash ที่มีเครื่องหมายโคลอนคู่ '::'
ฉันมาข้ามสคริปต์ทุบตีในวันนี้ว่ามีฟังก์ชั่นที่มีชื่อทวิภาคคู่::ในพวกเขาเช่นและfile::write() file::read()ฉันไม่เคยเห็นไวยากรณ์นี้มาก่อนในสคริปต์ Bash และเมื่อฉันเรียกใช้สคริปต์สคริปต์จะทำงานได้ดี (ทำให้ฉันประหลาดใจ) หลังจากกำจัด man page ของ Bash ในระบบของฉัน (และออนไลน์) ฉันไม่พบสิ่งใดในเอกสารที่สนับสนุนไวยากรณ์นี้สำหรับชื่อฟังก์ชัน ตัวอย่างเช่นส่วนShell Defined Functionsกำหนดไวยากรณ์สำหรับฟังก์ชั่นเปลือกที่จะ function name [()] compound-command [redirection] และจากนั้น (ที่อื่น ๆ ในคู่มือ) โทเค็นnameถูกกำหนดเป็น name A word consisting only of alphanumeric characters and underscores, and beginning with an alphabetic character or an underscore. Also referred to as an …

2
เครื่องหมายแบ็กสแลชหมายถึงคำสั่ง?
ซอฟต์แวร์ที่ฉันติดตั้งแทรกบรรทัดในโปรไฟล์ของฉันที่อ่าน: [ -s "$SOME_FILE" ] && \. "$SOME_FILE" ฉันรู้ว่า dot .มีความหมายเหมือนกันsourceดังนั้นฉันสงสัยว่านี่เป็นเพียงการจัดหาไฟล์ แต่ฉันไม่เคยเห็น\.มาก่อน มันทำอย่างอื่นได้ไหม แก้ไขเกี่ยวกับ DV:การค้นหา "backslash dot" จะนำไปสู่คำถามเกี่ยวกับการ./เรียกไฟล์ที่ปฏิบัติการได้และman sourceนำไปสู่ ​​manpage ที่\.ไม่ปรากฏขึ้น ฉันไม่รู้จะลองทำยังไงดี แก้ไข 2:ดูคำถามที่เกี่ยวข้อง เหตุใดจึงเริ่มต้นคำสั่งเชลล์ด้วยแบ็กสแลช แบ็กสแลชที่จุดเริ่มต้นของคำสั่ง เหตุใดแบ็กสแลชจึงป้องกันการขยายนามแฝง เรียกใช้คำสั่งที่มีเงาโดยนามแฝง
17 bash 

2
จะปลอดภัยหรือไม่ที่จะใช้ echo เพื่อส่งผ่านข้อมูลที่ละเอียดอ่อนไปยัง chpasswd?
ฉันพยายามที่จะตั้งค่ารหัสผ่านบัญชีผู้ใช้จำนวนchpasswdไม่มากโดยใช้ รหัสผ่านควรมีการสร้างแบบสุ่มและพิมพ์stdout(ฉันต้องเขียนพวกเขาลงหรือใส่ไว้ในการจัดเก็บรหัสผ่าน) chpasswdและยังผ่านเข้าสู่ อย่างไร้เดียงสาฉันจะทำเช่นนี้ { echo student1:$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 13 ; echo '') echo student2:$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 13 ; echo '') } | tee >(chpasswd) อย่างไรก็ตามฉันกังวลเกี่ยวกับการส่งรหัสผ่านใหม่เป็นอาร์กิวเมนต์บรรทัดคำสั่งไปที่echoเนื่องจากผู้ใช้รายอื่นมักมองเห็นข้อโต้แย้งในps -aux(แม้ว่าฉันจะไม่เคยเห็นechoบรรทัดใด ๆปรากฏps) มีวิธีอื่นในการเพิ่มมูลค่าให้กับรหัสผ่านที่ส่งคืนของฉันแล้วส่งผ่านเข้าไปยังchpasswd?

5
มีตัวดำเนินการ "in" ใน bash / bourne หรือไม่?
ฉันกำลังมองหาโอเปอเรเตอร์“ in” ที่ใช้งานได้เช่นนี้: if [ "$1" in ("cat","dog","mouse") ]; then echo "dollar 1 is either a cat or a dog or a mouse" fi เห็นได้ชัดว่ามันเป็นคำสั่งที่สั้นกว่าเมื่อเปรียบเทียบกับพูดโดยใช้การทดสอบหลาย ๆ แบบหรือ

4
ทำไมการทดแทนประวัติทุบตียังเปิดใช้งานโดยค่าเริ่มต้น [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดเมื่อปีที่แล้ว ไม่มีใครรู้ว่าทำไมทุบตียังคงมีการเปิดใช้งานการทดแทนประวัติโดยค่าเริ่มต้น? ฉัน.bashrcรวมset +Hมาหลายปีแล้ว แต่คนอื่นบางคนยังคงถูกกัดโดยคุณลักษณะนี้ เมื่อพิจารณาว่าทุกคนใช้เทอร์มินัลพร้อมคุณสมบัติคัดลอกวางและทุบตีคอมไพล์ด้วยการแทนที่readlineไลบรารีและประวัติถูกเปิดใช้งานโดยค่าเริ่มต้นในเชลล์แบบโต้ตอบเท่านั้นมีเหตุผลใด ๆ ที่มีคุณสมบัตินี้หรือไม่ ไม่มีสคริปต์ใด ๆ ที่มีอยู่จะใช้งานไม่ได้แม้ว่าจะถูกปิดใช้งานโดยค่าเริ่มต้นสำหรับเชลล์ทั้งหมด ลองใช้วิธีนี้หากคุณไม่ทราบว่าทำไมการทดแทนประวัติเสีย: $ set +H # disable feature history substitution $ echo "WTF???!?!!?" WTF???!?!!? $ set -H # enable feature history substitution $ echo "WTF???!?!!?" echo WTF???echo WTF???!?!!? WTF???echo WTF???!?!!? (เห็นได้ชัดว่าสถานที่มีปัญหาที่สำคัญถ้ามันถูกปิดใช้งานโดยค่าเริ่มต้นสำหรับการเขียนสคริปต์ทั้งหมดและมีคุณสมบัติที่มีอยู่เพื่อตรวจสอบผลลัพธ์ก่อนที่จะดำเนินการ: shopt -s histverify.) ดูสิ่งนี้ด้วย: …

3
ข้อผิดพลาดทางไวยากรณ์ใกล้กับโทเค็น `fi 'ที่ไม่คาดคิด
ฉันไม่ได้ต้องการคำตอบ แต่ถ้ามีคนสามารถชี้ให้ฉันไปที่วรรณกรรมหรือตัวอย่าง ฉันต้องการที่จะคิดออก เมื่อฉันเรียกใช้สคริปต์ฉันได้รับข้อผิดพลาด: ข้อผิดพลาดทางไวยากรณ์ใกล้โทเค็นที่ไม่คาดคิด fi ฉันได้อนุมานได้ว่าปัญหาของฉันของฉันอยู่ในifคำสั่งโดยการทำของฉันifงบแสดงความคิดเห็นและการเพิ่มซึ่งจะแสดงชื่อที่อยู่ในนั้นecho "$NAME"/etc/ เมื่อฉันทำการเปลี่ยนแปลงให้ลบออก#จากifและfiเพิ่ม#ใน wc -c "$NAME"ฉันได้รับข้อผิดพลาดทางไวยากรณ์ที่ฉันระบุไว้ข้างต้น ฉันได้เพิ่ม;ระหว่าง]นั้น ฉันได้ย้ายไปthenยังบรรทัดถัดไปโดยไม่มีความละเอียด #!/bin/bash for NAME in /etc/* do if [ -r "$NAME" -af "$NAME" ] then wc -c "$NAME" fi done
17 bash 

2
หยุดการติดตามการดำเนินการ bash (set -x) จากด้านนอกของสคริปต์
ฉันพยายามหาคำตอบสำหรับคำถามนี้ แต่ก็ยังไม่มีโชค: ฉันมีสคริปต์ที่รันสคริปต์อื่น ๆ และสคริปต์อื่น ๆ เหล่านั้นมี "set -x" ในตัวพวกเขาซึ่งทำให้พวกเขาพิมพ์ทุกคำสั่งที่เรียกใช้ ฉันต้องการกำจัดสิ่งนั้น แต่เก็บข้อมูลไว้หากสคริปต์ใดส่งข้อความข้อผิดพลาดไปยัง stderr ดังนั้นฉันจึงไม่สามารถเขียน ./script 2>/dev/null นอกจากนี้ฉันไม่มีสิทธิ์ในการแก้ไขสคริปต์อื่น ๆ เหล่านั้นดังนั้นฉันจึงไม่สามารถเปลี่ยนตัวเลือกชุดได้ด้วยตนเอง ฉันกำลังคิดเกี่ยวกับการบันทึกทุกอย่างตั้งแต่ stderr ไปยังไฟล์แยกต่างหากและกรองคำสั่งการติดตาม แต่อาจจะมีวิธีที่ง่ายกว่านี้?
17 bash  shell  set 

2
เหตุใดการส่งออกตัวแปรใน ssh shell จึงพิมพ์รายการตัวแปรที่ส่งออก
พิจารณาสิ่งนี้: $ ssh localhost bash -c 'export foo=bar' terdon@localhost's password: declare -x DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus" declare -x HOME="/home/terdon" declare -x LOGNAME="terdon" declare -x MAIL="/var/spool/mail/terdon" declare -x OLDPWD declare -x PATH="/usr/bin:/bin:/usr/sbin:/sbin" declare -x PWD="/home/terdon" declare -x SHELL="/bin/bash" declare -x SHLVL="2" declare -x SSH_CLIENT="::1 55858 22" declare -x SSH_CONNECTION="::1 55858 ::1 22" declare -x …
17 bash  ssh 

1
วิธียกเลิกการเชื่อมต่อ TCP ที่สร้างโดย bash เอง?
ฉันเคยexec 3<>/dev/tcp/192.168.0.101/6435สร้างการเชื่อมต่อ TCP กับ 192.168.0.101:6435 และฉันได้รับรวมทั้งส่งข้อความสองสามข้อความด้วยpipeคำคำสั่ง ตอนนี้ฉันต้องการยกเลิกการเชื่อมต่อ TCP แต่ด้วยss -anpetฉันสามารถเห็นว่าทุบตีตัวเองถือการเชื่อมต่อนี้โดยไม่ต้องแยกกระบวนการเด็ก ฉันพยายามส่งสัญญาณ 9 และ 15 ไปยังกระบวนการทุบตี แต่อย่างที่ทราบกันว่าทุบตีไม่สามารถฆ่าตัวตายได้ ดังนั้นฉันสามารถยุติการเชื่อมต่อ TCP ที่ฉันสร้างขึ้นได้โดยไม่ยกเลิก pts ที่ฉันกำลังใช้ (ไม่ฆ่าด้วย root หรือส่ง Ctrl + D)?

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