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

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

13
วิธีการตรวจสอบว่ากระบวนการทำงานอยู่หรือไม่และใช้เพื่อสร้างเชลล์สคริปต์แบบมีเงื่อนไข
ฉันจะทราบได้อย่างไรว่ากระบวนการกำลังทำงานอยู่หรือไม่จากนั้นให้สคริปต์ทุบตีดำเนินการบางอย่างตามเงื่อนไขนั้น ตัวอย่างเช่น: หากกระบวนการabcทำงานให้ทำเช่นนี้ หากไม่ได้ทำงานให้ทำเช่นนั้น
108 bash  process 

6
วิธีหลีกเลี่ยงรายการที่ซ้ำกันใน. bash_history
คำสั่งเดียวกันแสดงอยู่ในประวัติของฉันซ้ำแล้วซ้ำอีก ฉันจะหลีกเลี่ยงสิ่งนี้ได้อย่างไร ฉันรู้ว่าเป็นไปได้ผ่านทางHISTCONTROLแต่ฉันไม่พบวิธีที่ถูกต้อง
108 bash  history 

8
ฉันจะรับบรรทัดคำสั่งยาวเพื่อตัดบรรทัดถัดไปได้อย่างไร
สิ่งที่ฉันสังเกตเห็นใน Ubuntu เป็นเวลานานที่ทำให้ฉันหงุดหงิดคือเมื่อฉันพิมพ์คำสั่งที่บรรทัดคำสั่งที่ยาวขึ้น (กว้างกว่า) มากกว่าความกว้างของเทอร์มินัลแทนที่จะไปที่บรรทัดใหม่มันจะย้อนกลับไปที่ คอลัมน์ 1 ในบรรทัดเดียวกันและเริ่มเขียนทับจุดเริ่มต้นของบรรทัดคำสั่งของฉัน (มันไม่ได้เขียนทับคำสั่งจริง แต่จริงๆแล้วมันเป็นการเขียนทับข้อความที่แสดง) มันยากที่จะอธิบายโดยไม่เห็นมัน แต่สมมุติว่าเทอร์มินัลของฉันกว้าง 20 ตัวอักษร (ของฉันมีความยาวมากกว่า 120 ตัวอักษร - แต่เพื่อเป็นตัวอย่าง) และฉันต้องการสะท้อนตัวอักษรภาษาอังกฤษ สิ่งที่ฉันพิมพ์คือ: echo abcdefghijklmnopqrstuvwxyz แต่หน้าตาเทอร์มินัลของฉันก่อนที่ฉันจะกดปุ่มคือ: pqrstuvwxyzghijklmno เมื่อฉันกด Enter มันสะท้อน abcdefghijklmnopqrstuvwxyz ดังนั้นฉันรู้ว่าได้รับคำสั่งอย่างถูกต้อง มันเพิ่งพิมพ์ข้อความของฉันหลังจาก "o" และเริ่มต้นใหม่ในบรรทัดเดียวกัน สิ่งที่ฉันคาดว่าจะเกิดขึ้นถ้าฉันพิมพ์คำสั่งนี้ในเทอร์มินัลที่มีความกว้างเพียง 20 ตัวอักษรจะเป็นดังนี้: echo abcdefghijklmno pqrstuvwxyz พื้นหลัง: ฉันใช้ทุบตีเป็นเปลือกของฉันและฉันมีบรรทัดนี้ใน ~ / .bashrc ของฉัน: set -o vi เพื่อให้สามารถนำทางบรรทัดคำสั่งด้วยคำสั่ง VI …
108 command-line  bash 

7
ไม่สามารถเรียกใช้ไฟล์. sh: / bin / bash ^ M: ล่ามที่ไม่ดี
ฉันต้องการรันเชลล์สคริปต์: -rwxr-x--x 1 root root 17234 Jun 6 18:31 create_mgw_3shelf_6xIPNI1P.sh ฉันพยายามทำตามขั้นตอนมาตรฐาน แต่ฉันพบข้อผิดพลาดนี้: ./create_mgw_3shelf_6xIPNI1P.sh localhost 389 -l /opt/fews/sessions/AMGWM19/log/2013-06-06-143637_CLA-0 DEBUG cd/etc/opt/ldapfiles/ldif_in ; ./create_mgw_3shelf_6xIPNI1P.sh localhost 389 -l /opt/fews/sessions/AMGWM19/log/2013-06-06-143637_CLA-0 **ERROR sh: ./create_mgw_3shelf_6xIPNI1P.sh: /bin/bash^M: bad interpreter: No such file or directory** มันหมายความว่าอะไร? ฉันทำสิ่งนี้ในฐานะrootผู้ใช้ภายใต้rootกลุ่ม หมายความว่าไฟล์ไม่มีสิทธิ์ที่ถูกต้องสำหรับrootผู้ใช้หรือไม่?

11
สคริปต์จะตรวจสอบได้อย่างไรว่ามันถูกเรียกใช้ในฐานะรูท
ฉันกำลังเขียนสคริปต์ทุบตีง่าย ๆ แต่ฉันต้องการให้ตรวจสอบว่ามันถูกเรียกใช้เป็น root หรือไม่ ฉันรู้ว่าอาจเป็นวิธีที่ง่ายมากในการทำเช่นนั้น แต่ฉันไม่รู้ว่าทำอย่างไร เพียงเพื่อจะชัดเจน: อะไรวิธีง่ายๆในการเขียนสคริปต์foo.shเพื่อให้คำสั่ง./foo.shผล0และคำสั่งsudo ./foo.shผล1?
104 bash  scripts  root 

3
การเปลี่ยนสีสำหรับผู้ใช้โฮสต์ข้อมูลไดเรกทอรีในพรอมต์คำสั่งเทอร์มินัล
เป็นไปได้หรือไม่ที่จะเปลี่ยนสีในพรอมต์คำสั่งสำหรับuser@computerรวมถึงไดเรกทอรีปัจจุบันและส่วนคำสั่งของการแสดงพรอมต์? ฉันเห็นบางสิ่งเช่นนี้แล้วโดยผู้ใช้ OSX แต่ฉันไม่ทราบวิธีการทำสิ่งเดียวกันในเทอร์มินัล gnome (ฉันสามารถเปลี่ยนสีพื้นหน้าและสีพื้นหลังได้เท่านั้น) มันจะมีประโยชน์มากเมื่อพยายามรวบรวมโปรแกรมที่มีข้อผิดพลาดเนื่องจากข้อความที่ไม่ได้จัดรูปแบบมานานทำให้ยากที่จะแยกแยะว่าบรรทัดใดเป็นคำสั่งและเอาต์พุต


9
วิธีการเรียกใช้นามแฝงในเชลล์สคริปต์?
ฉันมีแฟ้มที่ปฏิบัติการซึ่งเป็นเส้นทางแบบเต็มmpiexec ~/petsc-3.2-p6/petsc-arch/bin/mpiexecเนื่องจากฉันต้องการรันคำสั่งนี้ในไดเรกทอรีต่าง ๆ (โดยไม่ต้องพิมพ์เส้นทางทั้งหมด) ฉันจึงตั้งค่านามแฝงใน.bashrcไฟล์โฮมของฉัน: alias petsc="~/petsc-3.2-p6/petsc-arch/bin/mpiexec" ซึ่งทำให้ฉันสามารถรันmpiexecไฟล์นี้ที่ command prompt ได้อย่างง่ายดายโดยพิมพ์: petsc myexecutable ฉันพยายามเขียนไฟล์สคริปต์เชลล์ชื่อscriptใช้นามแฝงใหม่petscเป็นคำสั่ง หลังจากให้สิทธิ์สคริปต์เชลล์ของฉัน (โดยใช้chmod) ฉันพยายามเรียกใช้สคริปต์ อย่างไรก็ตามมันทำให้ฉันมีข้อผิดพลาดต่อไปนี้: ./script: line 1: petsc: command not found ฉันรู้ว่าฉันสามารถเขียนพา ธ แบบเต็มไปยังmpiexecไฟล์ได้ แต่มันก็ยุ่งยากในการเขียนพา ธ แบบเต็มทุกครั้งที่ฉันต้องการเขียนสคริปต์ใหม่ มีวิธีที่ฉันสามารถใช้นามแฝงpetscในไฟล์สคริปต์หรือไม่? มีวิธีที่ฉันสามารถแก้ไข.bashrcหรือ.bash_profileทำให้เกิดขึ้นได้หรือไม่
101 bash  scripts  alias 

7
จะทำอย่างไรเมื่อ Ctrl-C จะไม่ฆ่าการทำงาน?
บางครั้งกระบวนการจะไม่สนใจสัญญาณ SIGINT ที่ส่งโดยCtrl- Cใน Bash ยกตัวอย่างเช่นและman viสมมติว่าคุณไม่ต้องการ google หรืออ่านคู่มือเกี่ยวกับวิธีออกจากกระบวนการทำงานมีลำดับของคีย์ใดบ้างที่จะใช้งานได้ตลอดเวลา (โดยไม่ต้องออกจากเทอร์มินัล)

9
Bash ลบอักขระตัวแรกและตัวสุดท้ายออกจากสตริง
ฉันมีสตริงเช่นนั้น: |abcdefg| และฉันต้องการรับสายอักขระใหม่ที่เรียกว่า Someway (เช่น string2) ด้วยสายอักขระดั้งเดิมโดยไม่มี|อักขระสองตัวที่เริ่มต้นและท้ายสุดเพื่อให้ฉันมี: abcdefg เป็นไปได้ในการทุบตี?

4
ปุ่มลูกศร, Home, End, คีย์แบบแท็บไม่ทำงานในเชลล์
ฉันได้ติดตั้ง Ubuntu น้อยที่สุด (mini.iso) บน VM ของฉัน จากนั้นผมก็ใช้โหมดการกู้คืนเข้าสู่ระบบเป็นรากและสร้างบัญชีด้วยแล้วตั้งรหัสผ่านด้วยuseradd -m adminpasswd admin เมื่อฉันเข้าสู่ระบบในบัญชีใหม่แทนการแจ้งเตือนปกติฉันเห็นเพียง$สัญญาณ ถ้าฉันพยายามแท็บกรอกคำสั่งหรือชื่อไฟล์มันพิมพ์แท็บปกติ ถ้าผมพยายามที่จะใช้ปุ่มลูกศรมันพิมพ์^[[A, ^[[B, หรือ^[[C ^[[Dนอกจากนี้จะlsไม่เพิ่มสีอีกต่อไป ไม่มีปัญหาเหล่านี้อยู่ในโหมดการกู้คืน ฉันจะแก้ไขสิ่งนี้ได้อย่างไร

2
การกด Enter จะสร้าง ^ M แทนการขึ้นบรรทัดใหม่
ตัวอย่างเช่นหากฉันกำลังtail -fใช้ไฟล์หรือกำลังreadป้อนข้อมูลผู้ใช้<Enter>จะสร้าง^Mในเทอร์มินัลแทนการสิ้นสุดreadหรือเพิ่มบรรทัดใหม่ให้ stdout ^Jทำงานได้ดี ฉันกำลังsshเข้าสู่ระบบอูบุนตูถ้าเป็นเช่นนั้น สิ่งนี้เกิดขึ้นกับฉันทั้งใน zsh และ bash ทางออกหนึ่งที่ฉันเล่นด้วยคือทำการแมป^Mไปยัง^Jin zsh แต่ดูเหมือนว่าจะไม่สามารถแก้ไขปัญหารากได้ ใครรู้ว่าอาจเป็นสาเหตุของเรื่องนี้ แก้ไข: เพื่อตอบคำถามบางอย่างฉันกำลังsshเข้า Ubuntu จาก OSX ฉันใช้ iTerm และ zsh ฉันลืมที่จะพูดถึงว่าฉันใช้ tmux บนเครื่อง Ubuntu แก้ไข 2: พลาดคำถาม เมื่อฉันพิมพ์Ctrl-V Enterฉันจะได้รับ^M(ทั้งบน OSX และ Ubuntu) แก้ไขที่ 3: ใน OSX และ Ubuntu ผลิตecho $TERMscreen-256color
94 command-line  bash  zsh 

13
คุณสามารถตั้งรหัสผ่านเป็น. ssh / config เพื่ออนุญาตการเข้าสู่ระบบอัตโนมัติได้หรือไม่
ฉันใช้ Ubuntu 11.10 ฉันใช้sshสำหรับเชื่อมต่อกับเซิร์ฟเวอร์หลาย ๆ ตัวต่อวันดังนั้นฉันจึงใส่พารามิเตอร์ไว้ใน.ssh/configไฟล์ดังนี้ Host Home User netmoon Port 22 HostName test.com มีวิธีการใส่รหัสผ่านสำหรับแต่ละการเชื่อมต่อในไฟล์นี้ดังนั้นเมื่อเซิร์ฟเวอร์ขอรหัสผ่านเทอร์มินัลจะป้อนรหัสผ่านและส่งไปยังเซิร์ฟเวอร์หรือไม่ ฉันต้องการเพราะบางครั้งผมยืนอยู่ห่างออกไปจากเครื่องคอมพิวเตอร์และเมื่อฉันกลับไปพิมพ์รหัสผ่านและกดขั้วกล่าวว่าEnterCONNECTION CLOSED ป.ล. ฉันไม่ต้องการใช้คู่คีย์สาธารณะ / ส่วนตัว

11
ทำไมฉันต้องพิมพ์ `. / 'ก่อนดำเนินการโปรแกรมในไดเรกทอรีปัจจุบัน?
ในขณะที่รันโปรแกรม C, a.outโดยใช้เทอร์มิอูบุนตูทำไมฉันมักจะต้องพิมพ์./ก่อนที่จะa.outแทนการเพียงแค่เขียนa.out? มีวิธีแก้ปัญหานี้ไหม?

3
Bash: ลบออกจากเคอร์เซอร์จนถึงท้ายบรรทัดด้วยแป้นพิมพ์ลัด
พิจารณาพรอมต์ bash ต่อไปนี้โดยที่จะ^บอกตำแหน่งของพรอมต์: $ git commit -am "[bug 123456] Do this and that with the bug" ^ สมมติว่าฉันต้องการส่งมอบข้อผิดพลาดเดียวกันอีกครั้งด้วยข้อความส่งมอบที่แตกต่างกัน มีวิธีลบข้อความจากตำแหน่งเคอร์เซอร์จนถึงจุดสิ้นสุดบรรทัดหรือไม่

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