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

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

3
-e ทำอะไรใน bash shebang?
ฉันมีสคริปต์ทุบตีต่อไปนี้: #!/bin/bash -e egrep "^username" /etc/passwd >/dev/null if[ $? -eq 0 ] then echo "doesn't exist" fi สคริปต์นี้จะไม่ทำงานหากไม่มี -e อะไร-eทำเพื่อสคริปต์นี้ นอกจากนี้สิ่งที่$?ทำในบริบทนี้?
32 linux  bash 


2
ความแตกต่างระหว่าง kill, pkill และ killall คืออะไร
ผมคุ้นเคยกับkillคำสั่งและส่วนใหญ่ของเวลาที่เราเพียงแค่ใช้ฆ่า -9 จะฆ่ากระบวนการที่เข้มแข็งมีสัญญาณอื่น ๆ killอีกมากมายที่สามารถนำมาใช้กับ แต่ฉันสงสัยว่าอะไรคือกรณีการใช้งานpkillและkillallหากมีคำสั่ง kill อยู่แล้ว ทำpkillและkillallใช้killคำสั่งในการนำไปปฏิบัติหรือไม่? ฉันหมายความว่าพวกเขาเป็นเพียงแค่ห่อหุ้มkillหรือพวกเขามีการใช้งานของตัวเอง? ฉันต้องการทราบว่าpgrepคำสั่งรับรหัสกระบวนการจากชื่อกระบวนการ คำสั่งทั้งหมดเหล่านี้ใช้การเรียกระบบพื้นฐานเดียวกันหรือไม่? มีมุมมองที่แตกต่างจากประสิทธิภาพการทำงานใดบ้างเร็วกว่ากัน?

1
ในสถานการณ์ใดที่ใช้ PS2, PS3, PS4
เมื่อฉันเข้าสู่เชลล์ฉันเห็นพรอมต์ที่มีค่าถูกเก็บไว้ใน PS1 ฉันยังพบพรอมต์อื่น (แต่ไม่ทราบว่าอันไหน) เมื่อฉันใช้ไวยากรณ์เอกสารที่นี่: bc << HERE > แต่นั่นคือพรอมต์ทุกประเภท ฉันเคยพบมาแล้ว สถานการณ์ประเภทใดทำให้เกิดพรอมต์ที่แตกต่างกัน

3
สร้างเชลล์ย่อยด้วยเครื่องหมายปีกกา
ตามนี้ , วางรายการของคำสั่งระหว่างวงเล็บปีกกาทำให้เกิดรายการที่จะดำเนินการในบริบทเปลือกปัจจุบัน ไม่มี subshell จะถูกสร้างขึ้น ใช้psเพื่อดูสิ่งนี้ในการทำงาน นี่คือลำดับชั้นกระบวนการสำหรับไพพ์ไลน์กระบวนการดำเนินการโดยตรงบนบรรทัดคำสั่ง 4398 เป็น PID สำหรับเชลล์ล็อกอิน: sleep 2 | ps -H; PID TTY TIME CMD 4398 pts/23 00:00:00 bash 29696 pts/23 00:00:00 sleep 29697 pts/23 00:00:00 ps ตอนนี้ตามลำดับชั้นกระบวนการสำหรับไพพ์ไลน์กระบวนการระหว่างวงเล็บปีกกาที่ดำเนินการโดยตรงบนบรรทัดคำสั่ง 4398 เป็น PID สำหรับเชลล์ล็อกอิน มันคล้ายกับลำดับชั้นด้านบนเพื่อพิสูจน์ว่าทุกอย่างถูกดำเนินการในบริบทเชลล์ปัจจุบัน : { sleep 2 | ps -H; } PID TTY TIME …
31 bash  subshell 

7
อะไรคือสิ่งที่เทียบเท่ากับ && เมื่อเขียนสคริปต์ทุบตี
ฉันต้องขออภัยล่วงหน้าหากนี่เป็นคำถามที่ซ้ำกัน ฉันพยายามค้นหา / ตรวจสอบก่อนถามที่นี่ ฉันรู้สึกสะดวกสบายกับการเขียนหนึ่ง liners เช่นนี้: foocommand && foocommand2 && foocommand3 แนวคิดที่ว่าฉันต้องการเพียงคำสั่งที่ตามมาเท่านั้นที่จะทำงานหากคำสั่งก่อนหน้านี้ "สำเร็จ" ฉันกำลังเขียนสคริปต์ที่ค่อนข้างยาวและหนึ่งบรรทัดนี้เป็นไปไม่ได้เพราะมันดูเหมือนว่าจะทำให้ผู้อื่นสับสนรหัสขนาดใหญ่ ฉันต้องการเว้นวรรคคำสั่งและเขียนความคิดเห็นไว้ในสคริปต์ ฉันจะทำสิ่งนี้และยังคงเทียบเท่า && อยู่ได้อย่างไร
31 bash  centos  scripting 

5
วิธีทำให้เทอร์มินัลแสดง user @ machine เป็นตัวอักษรหนา
ฉันเคยเห็นในบางช็อตหน้าจอ (จำไม่ได้ว่าอยู่ที่ไหนบนเว็บ) ว่าเทอร์มินัลสามารถแสดง[username@machine /]$ตัวอักษรตัวหนา ฉันรอคอยที่จะได้รับสิ่งนี้เช่นกันเพราะฉันมักจะพบว่าตัวเองเลื่อนผ่านเอาต์พุตยาว ๆ เพื่อค้นหาบรรทัดแรกหลังจากคำสั่งของฉันลำบาก ฉันจะทำให้ชื่อผู้ใช้เป็นตัวหนาและมีสีได้อย่างไร?

4
เริ่มต้นกระบวนการบน tty อื่น
หลังจาก Googling ประมาณหนึ่งชั่วโมงฉันไม่อยากจะเชื่อเลยว่าไม่มีใครถามคำถามนี้มาก่อนเลย ... ดังนั้นฉันจึงมีสคริปต์ทำงานบน TTY1 ฉันจะทำให้สคริปต์นั้นเปิดตัวโปรแกรมตามอำเภอใจบน TTY2 ได้อย่างไร ฉันพบttyแล้วซึ่งจะบอกคุณว่าคุณกำลังใช้งาน TTY อยู่ ฉันพบwritevtซึ่งเขียนข้อความบรรทัดเดียวลงบน TTY อื่น ฉันพบว่าchvtการเปลี่ยนแปลงใดที่ TTY แสดงอยู่ในปัจจุบัน ฉันไม่ต้องการแสดง TTY2 ฉันต้องการให้สคริปต์หลักดำเนินการตามปกติ แต่ถ้าฉันสลับไปที่ TTY2 ด้วยตนเองฉันสามารถโต้ตอบกับโปรแกรมที่สองได้
31 bash  tty 


10
วิธีการเริ่มต้นสคริปต์ Python ใหม่โดยอัตโนมัติหากมีการฆ่าหรือตาย
ฉันกำลังเรียกใช้สคริปต์ Python ของฉันในพื้นหลังในเครื่อง Ubuntu ของฉัน (12.04) เช่นนี้ - nohup python testing.py > test.out & ตอนนี้อาจเป็นไปได้ว่าในบางช่วงของฉันข้างต้นPython scriptสามารถตายด้วยเหตุผลใดก็ตาม ดังนั้นฉันคิดว่าจะมีcron agentสคริปต์เชลล์ bash ซึ่งสามารถรีสตาร์ทสคริปต์ Python ด้านบนของฉันโดยอัตโนมัติหากมันถูกฆ่าด้วยเหตุผลใดก็ตาม เป็นไปได้ที่จะทำ? ถ้าใช่แล้ววิธีที่ดีที่สุดในการแก้ไขปัญหาเหล่านี้คืออะไร UPDATE: หลังจากสร้างtesting.confไฟล์แบบนี้ - chdir /tekooz exec python testing.py respawn ฉันรันคำสั่ง sudo ด้านล่างเพื่อเริ่มต้น แต่ฉันไม่เห็นว่ากระบวนการทำงานโดยใช้ ps ax หรือไม่ root@bx13:/bezook# sudo start testing testing start/running, process 27794 root@bx13:/bezook# ps …
31 bash  shell  cron  python 

7
เครื่องมือแปลง ASCII เป็น Binary และ Binary เป็น ASCII?
เครื่องมือใดดีในการแปลง ASCII เป็นไบนารีและไบนารีเป็น ASCII ฉันหวังว่าจะชอบ: $ echo --binary "This is a binary message" 01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101 หรือสมจริงยิ่งขึ้น: $ echo "This is a binary message" | ascii2bin 01010100 01101000 01101001 …
31 bash  binary  ascii 

4
จะเกิดอะไรขึ้นถ้าคุณแก้ไขสคริปต์ระหว่างการดำเนินการ
ฉันมีคำถามทั่วไปซึ่งอาจเป็นผลมาจากความเข้าใจผิดว่ากระบวนการจัดการใน Linux อย่างไร สำหรับวัตถุประสงค์ของฉันฉันจะกำหนด 'สคริปต์' เป็นตัวอย่างของรหัสทุบตีบันทึกไว้ในไฟล์ข้อความที่มีสิทธิ์ดำเนินการเปิดใช้งานสำหรับผู้ใช้ปัจจุบัน ฉันมีชุดของสคริปต์ที่โทรหากันตามกัน ฉันจะเรียกพวกเขาว่าสคริปต์ A, B และ C. Script A ดำเนินการชุดคำสั่งแล้วหยุดชั่วคราวจากนั้นจะเรียกใช้สคริปต์ B จากนั้นหยุดสคริปต์แล้วเรียกใช้สคริปต์ C ในคำอื่น ๆ ซีรีส์ ขั้นตอนเป็นดังนี้: เรียกใช้สคริปต์ A: ชุดคำสั่ง หยุด เรียกใช้สคริปต์ B หยุด เรียกใช้สคริปต์ C ฉันรู้จากประสบการณ์ว่าถ้าฉันเรียกใช้สคริปต์ A จนกระทั่งหยุดการทำงานชั่วคราวจากนั้นทำการแก้ไขในสคริปต์ B การแก้ไขเหล่านั้นจะสะท้อนให้เห็นในการทำงานของรหัสเมื่อฉันอนุญาตให้ทำงานต่อ ในทำนองเดียวกันถ้าฉันทำการแก้ไขสคริปต์ C ในขณะที่สคริปต์ A ยังคงหยุดชั่วคราวแล้วอนุญาตให้ดำเนินการต่อหลังจากบันทึกการเปลี่ยนแปลงการเปลี่ยนแปลงเหล่านั้นจะสะท้อนให้เห็นในการเรียกใช้โค้ด ต่อไปนี้เป็นคำถามจริงมีวิธีแก้ไขสคริปต์ A ในขณะที่ยังทำงานอยู่หรือไม่ หรือการแก้ไขเป็นไปไม่ได้เมื่อเริ่มดำเนินการ?

3
ไม่รวมคำสั่งบางส่วนจากการถูกเก็บไว้ในประวัติทุบตี
มีวิธีที่จะไม่รวมคำสั่งเช่นใด ๆrm -rf, svn revertจากการได้รับการจัดเก็บไว้ในประวัติศาสตร์ทุบตี? ที่จริงแล้วฉันผิดพลาดออกหลายครั้งถึงแม้ว่าฉันจะไม่ได้ตั้งใจก็ตามเพราะฉันทำสิ่งต่าง ๆ ได้อย่างรวดเร็วและเกิดขึ้น ดังนั้นผลลัพธ์ในการสูญเสียงานมากมายที่ฉันได้ทำจนถึง

8
แสดงวินาทีเป็นวัน / ชั่วโมง / นาที / วินาทีหรือไม่
เป็นไปได้หรือไม่ที่จะจัดรูปแบบวินาทีเป็นเวลาที่มนุษย์สามารถอ่านได้โดยง่ายในการทุบตี? ฉันไม่ต้องการจัดรูปแบบเป็นวันที่ แต่เป็นจำนวนวัน / ชั่วโมง / นาทีเป็นต้น ...
31 bash 

6
ตรวจสอบว่าหมายเลขอินพุตเป็นจำนวนเต็มหรือไม่
ฉันพยายามตรวจสอบว่าการป้อนข้อมูลเป็นจำนวนเต็มหรือไม่และฉันผ่านไปหลายร้อยครั้ง แต่ไม่เห็นข้อผิดพลาดในสิ่งนี้ อนิจจามันไม่ทำงานมันเป็นต้นเหตุของคำสั่ง if สำหรับอินพุตทั้งหมด (ตัวเลข / ตัวอักษร) read scale if ! [[ "$scale" =~ "^[0-9]+$" ]] then echo "Sorry integers only" fi ฉันเล่นด้วยคำพูด แต่ก็ไม่ได้ทำหรือไม่ทำอะไรเลย ฉันทำอะไรผิด มีวิธีที่ง่ายกว่าในการทดสอบว่าอินพุตเป็นเพียงจำนวนเต็มหรือไม่?

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