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

Bash (Bourne-Again SHell) เป็นเชลล์ที่ใช้ในอินเตอร์เฟสบรรทัดคำสั่งของ Ubuntu ตามค่าเริ่มต้น

2
อ๊ะเพื่อให้ผู้ใช้ทั่วไปทั้งหมดอยู่ในเงามืด
ฉันมีสคริปต์ ฉันต้องการที่จะได้รับผู้ใช้ปกติทั้งหมดของฉันจาก/etc/shadowเช่นผู้ใช้ทุกคนซึ่งในระยะที่สองในแฟ้มเงาเริ่มต้นด้วยหรือ$!$ รูปแบบของฉันคือ sudo getent shadow | awk -F: '$2 ~ /^$/ || /^!$/ {print $1}' มันใช้งานไม่ได้ตอนนี้
8 bash  scripts 

4
ฉันจะนำเข้าผลลัพธ์จากคำสั่งเป็นคำสั่งใน Bash ได้อย่างไร
ระบบ Linux hosek 4.15.0-48-generic #51-Ubuntu SMP Wed Apr 3 08:28:49 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux ปัญหา ฉันต้องการเอาท์พุทเป็นคำสั่งในสคริปต์ bash เพื่อเก็บตัวแปร ตัวอย่าง sed -n '/# Main configuration./,/# Websites./p' webcheck-$category.cfg | sed '1,1d' | sed '$ d' คำสั่งนี้ส่งคืนบรรทัดเหล่านี้: email_sender='some@email.com' email_recipients='another@email.com' ฉันจะอ่าน / เรียกใช้เอาต์พุต / บรรทัดเหล่านี้เป็นคำสั่งในสคริปต์ได้อย่างไร การเก็บเอาต์พุตนี้ไปยังไฟล์จากนั้นอ่านโดยใช้sourceคำสั่งวิธีเดียว? ฉันพยายาม| sourceที่ส่วนท้ายของคำสั่ง แต่อ่านได้จากไฟล์เท่านั้น ฉันลองechoตอนต้น แต่ก็ไม่มีผล ขอบคุณ

3
ฉันจะเปลี่ยนรหัส ^ L ในหลาย ๆ ไฟล์ใน Ubuntu ได้อย่างไร
ฉันมีไฟล์ XML จำนวนมากมากกว่า 50,000 ไฟล์ ในไฟล์ XML บางไฟล์ไฟล์บางไฟล์จะถูกเขียนเช่นนี้ <filename>abc.JPEG<^Lilename> ^Lเป็นเพียงตัวละครตัวหนึ่ง แต่ฉันไม่สามารถค้นหาความ^Lหมายของ Google ได้ เมื่อฉันใช้catพิมพ์เนื้อหาของไฟล์มันจะแสดงดังต่อไปนี้ <filename>abc.JPEG< ilename> อย่างไรก็ตามฉันต้องการเปลี่ยน<filename>abc.JPEG<^Lilename>เป็น<filename>abc.JPEG</filename> ฉันพบคำสั่งบางคำเพื่อเปลี่ยนคำในไฟล์จำนวนมากเช่น find . -exec perl -pi -e 's/[find_word]/[change_word]/g' {} \; ^Lแต่คำสั่งที่ไม่ทำงานในกรณีของฉันเพราะมันไม่สามารถรู้จักคำค้นหาเมื่อฉันเพียงแค่พิมพ์ ฉัน<filename>abc.JPEG<^Lilename>จะเปลี่ยนเป็น<filename>abc.JPEG</filename>ไฟล์จำนวนมากได้อย่างไร?
8 bash  perl 

2
วิธีรับสตริงย่อยจากคำสั่ง bash
กำหนดสตริงย่อยต่อไปนี้ที่ได้รับจากคำสั่งdf /dev/sdb1 | tail -n 1: /dev/sdb1 1952971772 1441131032 511840740 74% /media/kaiman/ShareData ฉันต้องการแยก1952971772และ74%จากสตริงนั้นเพื่อใช้ในสคริปต์ทุบตี ฉันรู้ว่าฉันสามารถใช้คำสั่งตัดบางอย่างหรือบางอย่าง แต่มันจะไม่ทำงานอีกต่อไปหากมีการเปลี่ยนแปลงขนาดเช่น ฉันยังมีความคิดเกี่ยวกับการใช้ regex หรือบางสิ่งบางอย่าง แต่ฉันต้องการมีแนวทางที่แนะนำมากที่สุด ขอบคุณล่วงหน้า!

1
ฉันจะควบคุมได้อย่างไรเมื่อ bash auto-completion แสดง paged list ของความสำเร็จ
ในการติดตั้ง linux ก่อนหน้าของฉันการทุบตีการเติมข้อมูลอัตโนมัติจะทำงานได้อย่างไม่มีปัญหา ถ้าฉันต้องการจะทำทุกอย่างกับไฟล์ให้คำนำหน้าชื่อไฟล์และกด tabulator แสดงรายการทั้งหมดที่ตรงกับคำนำหน้า แต่มันก็ทำซ้ำพรอมต์ด้านล่างด้วยคำสั่งและคำนำหน้าของฉันเพื่อให้ฉันสามารถพิมพ์ต่อไปได้ทันที ตอนนี้ฉันได้อัปเดตระบบเป็น kubuntu 18.04 และระบบเติมข้อความอัตโนมัติไม่ทำงานอีกต่อไปอย่างคล่องแคล่ว แม้กระทั่งคนแปลกหน้าพฤติกรรมแบบนี้คาดเดาไม่ได้เหมือนมันขึ้นอยู่กับ konsole หากคำสั่งคือlessมันทำงานได้อย่างถูกต้องเสมอ (ตามที่อธิบายไว้ข้างต้น) แต่ถ้าคำสั่งเป็นcpหรือmvพฤติกรรมที่แตกต่างกันไป บางครั้งมันทำงานได้อย่างถูกต้อง แต่บ่อยครั้งมันแสดงรายการของไฟล์ที่ตรงกันด้วยเพิ่มเติม (ซ่อนการแจ้งของฉัน) และฉันต้องพิมพ์qเพื่อออกมากขึ้นและสามารถดำเนินการต่อได้ สิ่งเล็ก ๆ แต่น่ารำคาญเนื่องจากต้องใช้การพิมพ์พิเศษ ฉันเห็นการ.bashrcโทรนั้น/usr/share/bash-completion/bash_completion แต่ฉันไม่ได้ทำการเปลี่ยนแปลงใด ๆ คำถาม: อะไรทำให้เกิดพฤติกรรมที่คาดเดาไม่ได้? ฉันจะแก้ไขได้อย่างไร

4
SSH สามารถทำงานกับเงื่อนไข if ได้อย่างไร?
ฉันมีifคำสั่งให้คำนวณไฟล์และลบทั้งหมดยกเว้นไฟล์สามไฟล์ล่าสุด แต่ฉันต้องการเรียกใช้คำสั่งนี้จากระยะไกล ฉันจะรวมsshกับifเงื่อนไขได้อย่างไร ฉันลองสิ่งนี้ แต่ไม่ประสบความสำเร็จ #!/bin/bash ssh -t test@192.168.94.139 "cd /var/www/test.com/backup ; if [ $(ls | wc -l) -lt 3 ] then echo "Less" else [ $(ls -t *.tgz|awk 'NR >3'|xargs rm -f) ] echo "deleted" fi" ข้อผิดพลาดที่ฉันได้รับ: ls: ไม่สามารถเข้าถึง * .tgz: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว

6
สร้างไดเรกทอรีที่มีชื่อจากไฟล์ txt ซึ่งมีอักขระ '/'
ฉันมีไฟล์. txt ที่มีข้อความเช่นนี้ A1/B1/C1 A2/B2/C2 A3/B3/C3 ฉันต้องการสคริปต์ที่อ่านไฟล์. txt สำหรับแต่ละบรรทัดจากนั้นสร้างไดเรกทอรีตามคำแรก (A1, A2, A3) ฉันได้สร้างสคริปต์เช่นนี้: file="test.txt" while IFS='' read -r line do name="line" mkdir -p $line done <"$file" ในขณะที่ฉันเรียกใช้มันสร้างไดเรกทอรี A1 จากนั้นสร้างไดเรกทอรีย่อย B1 และ C1 เกิดขึ้นเหมือนกันสำหรับอีกบรรทัด (A2 * และ A3 *) ฉันควรทำอย่างไรเพื่อสร้างไดเรกทอรี A1, A2, A3 เท่านั้น ฉันไม่ต้องการตั้งชื่อเช่น A1 / B1 / C1 ด้วยอักขระ …

3
เชลล์สคริปต์จะข้าม PPA ถ้าติดตั้ง
ฉันต้องการสร้างสคริปต์ที่จะเพิ่ม PPA ใหม่หรือข้ามหากติดตั้งแล้ว มีคนโพสต์โซลูชันนี้ในคำถามอื่น: #!/bin/bash add_ppa() { for i in "$@"; do grep -h "^deb.*$i" /etc/apt/sources.list.d/* > /dev/null 2>&1 if [ $? -ne 0 ] then echo "Adding ppa:$i" sudo add-apt-repository -y ppa:$i else echo "ppa:$i already exists" fi done } เชลล์สคริปต์เพื่อเพิ่มพื้นที่เก็บข้อมูล apt แบบมีเงื่อนไข ในกรณีของฉันฉันต้องการที่จะเพิ่มppa:otto-kesselgulasch/gimp-edgeแต่ฉันไม่แน่ใจว่าฉันควรที่จะเพิ่มสิ่งนี้ในสคริปต์ ฉันพยายามadd_ppa(ppa:otto-kesselgulasch/gimp-edge)แต่ฉันได้รับข้อผิดพลาดว่า ( ppaเป็นชื่อของสคริปต์ของฉัน): ppa: 1: …
8 bash  scripts  ppa 

3
คำสั่งที่จะพิมพ์ค่าเพียงครั้งเดียวแม้ว่ามันจะปรากฏขึ้นหลายครั้ง
ฉันมีไฟล์ txt ขนาดใหญ่ซึ่งมีค่าซ้ำหลายครั้ง มีคำสั่งที่ฉันสามารถใช้ที่จะผ่านไฟล์และหากค่าหนึ่งปรากฏครั้งเดียวไม่ทำซ้ำอีกครั้ง? SO4 HOH CL BME HOH SO4 HOH CL BME HOH SO4 HOH SO4 HOH CL BME HOH SO4 HOH CL BME HOH CL ดังนั้นควรมีลักษณะดังนี้: S04 HOH CL BME สิ่งนี้คือฉันมีค่าแตกต่างกันจำนวนมากดังนั้นฉันไม่สามารถทำมันเองแบบนี้ได้

3
ฉันจะแก้ไขตัวแปรในเชลล์ที่ทำงานอยู่ได้อย่างไร?
ฉันกำลังแก้ไขพรอมต์ PS1 ของฉันและฉันไม่ต้องการให้ bashrc ของฉันทำการอัปเดตต่อไป (เนื่องจาก bashrc ของฉันรีเซ็ตสิ่งอื่นด้วยเช่นกัน) ฉันไม่ต้องการคัดลอกและวางมันซ้ำแล้วซ้ำอีก มีวิธีแก้ไขตัวแปรแบบโต้ตอบเช่นใช้nano(แก้ไขเริ่มต้นของฉัน) หรือไม่ PS1 ส่วนใหญ่เป็นตัวอย่างเพราะฉันต้องการทำสิ่งเดียวกันกับ vars อื่น ๆ เหตุผลที่ฉันต้องการทำแบบโต้ตอบก็คือตัวแปรนั้นมีความยาวและฉันต้องแก้ไขตัวละครสองสามตัวในนั้น และฉันแค่ต้องการเปลี่ยนมันในเปลือกปัจจุบัน

2
การกู้คืนใด ๆ จากสิ่งนี้? sudo chmod 600. *
คำเตือน - DO NOTรันกล่าวถึงคำสั่ง ดังนั้นดูเหมือนว่าฉันจะทำสิ่งที่ค่อนข้างโง่ที่นี่เพื่อวางไว้อย่างอ่อนโยน ฉันพยายามเปลี่ยนการอนุญาตสำหรับไฟล์บางไฟล์ในไดเรกทอรีที่เริ่มต้นด้วย.การอ่าน / เขียนสำหรับ sudo / root เท่านั้น ความพยายามของฉันในการเปลี่ยนไฟล์หลายไฟล์ในครั้งเดียวดูเหมือนว่าจะทำบางสิ่งบางอย่างในระดับโลกอย่างน่ากลัว ในขณะที่อยู่ในไดเรกทอรี (ไม่ได้อยู่ที่ root dir) ฉันวิ่งได้sudo chmod 600 .*ดีฉันโพสต์สิ่งนี้จากโทรศัพท์ของฉันตอนนี้ ... ฉันยังคงเปิดหน้าต่างเทอร์มินัลในขณะนี้ แต่ฉันค่อนข้างแน่ใจว่าแล็ปท็อปไป นอนหลับฉันทำเสร็จแล้ว เฮฮาแปลว่าคำถามนี้เร่งด่วนเล็กน้อย โอ้และสิ่งนี้ดูเหมือนว่าจะมีการเปลี่ยนแปลงการอนุญาตอยู่ใกล้ทุกที่ที่ฉันคาดเดา ฉันไม่สามารถเรียกใช้lsหรือcd ..คำสั่ง ความพยายามในการcd /home/brianหรือcd ~ให้ข้อผิดพลาดbash: cd: /home/brian: Permission Deniedและความพยายามใด ๆ ที่sudoคำสั่งเพียงแค่พูดว่าbash: /usr/bin/sudo: Permission Denied ฉันกลัวที่จะรีบูทไม่มีเงื่อนงำหากมีสิ่งใดสร้างขึ้นในการกู้คืนจากสิ่งที่เป็นใบ้ แต่คิดว่าฉันจะลองถามที่นี่ก่อนที่จะทำสิ่งที่เลวร้ายยิ่งกว่า ฉันเป็นลีนุกซ์รุ่นใหม่เมื่อระบบปฏิบัติการหลักของฉันได้รับการสนับสนุนและได้รับการสนับสนุนมาเมื่อไม่นานมานี้ ความคิดใด ๆ ของสิ่งที่ต้องลองจะได้รับการชื่นชมอย่างมาก แก้ไข:ฉันต้องการให้คำชี้แจงเกี่ยวกับวิธีการ / คำสั่งนี้ถูกดำเนินการ …

4
วิ่งผ่านสองฉากในหนึ่งวง
ฉันพยายามที่จะทำงานผ่านสองลำดับในวงเดียวกันในเปลือกของฉันเช่นด้านล่าง: #!/bin/bash for i in (1..15) and (20..25) ; do echo $i ...... .....other process done ความคิดใดที่ฉันสามารถบรรลุสิ่งนี้
8 command-line  bash  sh 

1
วิธีการใช้งานเทอร์มินัลต่อไปหลังจากออกคำสั่ง“ หยุดชั่วคราว”?
ฉันพิมพ์suspendในเทอร์มินัลและมันหยุดการทำงานชั่วคราว ฉันจะกลับไปใช้งานเทอร์มินัลปกติได้อย่างไร ฉันได้ลองCtrl+ C, Ctrl+ D, Ctrl+ Q( ตามที่แนะนำไว้ที่นี่ ) และCtrl+ Zแต่ไม่ได้ผล แน่นอนฉันสามารถปิดเทอร์มินัลแล้วเปิดใหม่ได้ แต่ไม่มีวิธีใดที่จะ "กลับมาทำงาน" ในเทอร์มินัลต่อไปได้? ฉันใช้ Ubuntu GNOME 16.04 โดยมีเชลล์เริ่มต้น (ทุบตี)

1
คำสั่งประวัติทำงานอย่างไร
เมื่อฉันพิมพ์คำสั่งใด ๆ ในเทอร์มินัลจะไม่ปรากฏใน~/.bash_historyไฟล์ของฉันจนกว่าฉันจะออกจากเซสชันของฉัน นอกจากนี้เมื่อฉันแก้ไข~/.bash_historyไฟล์ด้วยตนเอง(เช่นฉันลบคำสั่งสามคำสั่งล่าสุด) เมื่อฉันพิมพ์historyคำสั่งนั้นจะยังคงแสดงคำสั่งที่ฉันลบออกจาก~/.bash_historyไฟล์ เมื่อฉันออกจากเซสชันและลงชื่อเข้าใช้อีกครั้งจะหายไป ~/.bash_historyไฟล์และhistoryคำสั่งของฉันจะซิงโครไนซ์ได้อย่างไร

7
การลบประวัติจาก ~ / .bash_history
~/.bash_historyฉันมีคำถามที่สองเกี่ยวกับประวัติศาสตร์สายขั้วหรือคำสั่งที่ถูกเก็บไว้ใน ฉันสามารถดูไฟล์ในเทอร์มินัลด้วยhistoryคำสั่ง แต่ถ้าฉันพยายามที่จะเปิดมันด้วยgedit bash_historyไฟล์นั้นว่างเปล่าอย่างสมบูรณ์ ทำไม? ฉันพบวิธีลบจำนวนบรรทัดในไฟล์จากเทอร์มินัลด้วยบรรทัดรหัสนี้: for i in {1..N}; do history -d N; done โดยที่ N คือจำนวนบรรทัด (หรือคำสั่ง) ที่คุณต้องการลบ แต่ตอนนี้ไฟล์ประวัติแสดงคำสั่งสุดท้ายนี้และนั่นไม่ฉลาดมากหากคุณกำลังพยายามปกปิดเนื้อหาของคุณ ดังนั้นคำถามคือ: ฉันจะให้รหัสบรรทัดสุดท้ายและให้แน่ใจว่าสิ่งนี้ไม่ได้รับการบันทึก?

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