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

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

1
อะไรคือความแตกต่างระหว่าง. profile และ. bash_profile และทำไมฉันจึงไม่มีไฟล์. profile ในระบบของฉัน
ดังนั้นฉันค่อนข้างใหม่สำหรับ Linux และเพิ่งติดตั้ง Fedora 19 บนเน็ตบุ๊กของฉัน ฉันต้องการจะมีความเข้าใจที่ลึกซึ้งของลินุกซ์และ CLI ดังนั้นตอนนี้ผมอ่านเรียนรู้ Linux: วิธี ในแบบฝึกหัด 3 ผู้เขียนให้คำสั่งต่อไปนี้: ls -al แมว. โปรไฟล์ ฉันพยายามทำตามคำแนะนำเหล่านี้ แต่ไม่มีประโยชน์ ไม่มีไฟล์. profile ในไดเรกทอรีชื่อผู้ใช้ของฉันตามที่ฉันเห็นได้จาก ls -al จากสิ่งที่ฉันได้เรียนรู้ไฟล์. bash_profile และ. profile นั้นเหมือนกันทุกประการ ข้อแตกต่างเดียวที่ฉันได้ข้อสรุปจากการวิจัยของฉันคือ. bash_profile ได้รับการตรวจสอบก่อน สิ่งที่ฉันไม่เข้าใจคือเพราะเหตุใดจึงมีหลายไฟล์สำหรับฟังก์ชันเดียวกันใน Linux เหตุใดผู้เขียนจึงใช้. profile และไม่. bash_profile (ถ้าฉันเข้าใจอย่างถูกต้อง. profile จะไม่อ่านเมื่อระบบค้นหา. bash_profile ก่อน) และทำไมฉันถึงไม่มีไฟล์. profile บนระบบของฉัน
12 bash  profile 

4
ฉันจะทริกเกอร์การเติมข้อความอัตโนมัติโดยไม่ต้องใช้คีย์แท็บได้อย่างไร
ฉันกำลังใช้เครื่องของฉันกับ iPhone โดยใช้แอพชื่อ ServerAuditior ไม่มีคีย์แท็บ ดูภาพหน้าจอ ฉันจะทริกเกอร์การเติมข้อความอัตโนมัติโดยไม่ใช้คีย์แท็บได้อย่างไร ฉันไม่ต้องการพิมพ์อักขระจำนวนมากสำหรับซีดี - อิน ฉันมีปุ่มลูกศรในแอพนี้ ฉันสามารถปัดซ้ายขวาเพื่อใช้ปุ่มลูกศร มันจะน่าอัศจรรย์ถ้าฉันสามารถผูกมันเพื่อส่งต่อปุ่มลูกศรเมื่อไฟกระพริบเมื่อสิ้นสุดคำสั่งของฉัน

5
การตั้งค่าใน bash สำหรับ globbing คืออะไรเพื่อควบคุมว่า * ตรงกับไฟล์ dot หรือไม่
ฉันประหลาดใจเมื่อเร็ว ๆ นี้เมื่อฉันทำสิ่งที่ชอบ mv ./* ../somedirectory และพบว่าไฟล์เช่น.gitignoreนั้นไม่ได้ถูกย้าย ฉันทำงานส่วนใหญ่ของฉันใน zsh บน OS X และสิ่งนี้ทำให้ฉันประหลาดใจในการทุบตี CentOS ฉันพยายามทุบตีใน OS X และพบพฤติกรรมเดียวกัน: *ไม่ตรงกับไฟล์ dot ดูเหมือนว่าฉันจะไม่พึงประสงค์มาก แต่ดูเหมือนว่ามันเป็นค่าเริ่มต้นของ bash (อาจเป็นค่าเริ่มต้น zsh ด้วยสำหรับทุกสิ่งที่ฉันจำได้ แต่ฉันอาจเปลี่ยนไปเมื่อหลายปีก่อนใน. zshrc ของฉันและลืมว่ามันใช้งานได้แตกต่างกันไป) ฉันจะกำหนดค่า bash ให้ทำงานตามที่คาดไว้ได้อย่างไร: สำหรับ * เพื่อให้ตรงกับไฟล์ทั้งหมดและไม่ละเว้นไฟล์ dot ในกรณีที่ไม่ชัดเจนนี่คือวิธีการทำซ้ำ cd /tmp mkdir {t,d}est touch test/{.,}{1,2,3,4,5,6,7} ls -hal test mv test/* dest ls …
12 bash  wildcards 

4
cp vs. cat เพื่อคัดลอกไฟล์
cp a bและcat a > bอะไรคือความแตกต่าง? ในสคริปต์การติดตั้ง x86 ของซอร์สต้นไม้ของ linux kernel ( arch/x86/boot/install.sh) จะใช้ทั้งคู่: cat $2 > $4/vmlinuz cp $3 $4/System.map เหตุใดพวกเขาจึงไม่คงรูปแบบเดียวกันหากดีกว่าอีกรูปแบบหนึ่ง

3
จะไพพ์รายการคำสั่งที่แสดงโดยของ“ แท็บเสร็จสมบูรณ์” ได้อย่างไร?
เมื่อใช้คำสั่งใน bash ฉันชอบตัวเลือก double tab เพื่อแสดงคำสั่งที่มี คำสั่งบางคำมีการจับคู่ที่เป็นไปได้มากกว่าคำสั่งอื่น ๆ : สกรีนช็อตของการเติมแท็บให้สมบูรณ์ http://img13.imageshack.us/img13/5541/picturemhy.jpg มีวิธีที่ฉันสามารถไพพ์เอาท์พุทของแท็บดับเบิลไปยังที่ใดที่หนึ่งได้grepไหม? ฉันพบโพสต์ที่เกี่ยวข้องแต่ฉันก็ยังไม่แน่ใจว่าจะนำไปใช้กับไพพ์ได้อย่างไร

3
สัญญาณ 0 ในคำสั่ง Trap คืออะไร?
ฉันทำตามคำแนะนำนี้เกี่ยวกับวิธีการตั้งค่าการรับรองความถูกต้อง SSH แบบไม่มีรหัสผ่านกับ ssh-agent ในการเริ่มต้น ssh-agent ผู้เขียนแนะนำรหัสต่อไปนี้ใน.bash_profile: SSHAGENT=/usr/bin/ssh-agent SSHAGENTARGS="-s" if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then eval `$SSHAGENT $SSHAGENTARGS` trap "kill $SSH_AGENT_PID" 0 fi ฉันไม่เข้าใจว่าทำไมมันถึงเป็นกับดักสัญญาณ 0 ตามสัญญาณของมนุษย์ 7ไม่มีสัญญาณดังกล่าว นี่เป็นเพียงการพิมพ์ผิดหรือข้อผิดพลาดหรือทำสิ่งนี้สำเร็จหรือไม่
12 bash  signals  trap 

3
ชนิดของเอ็นจินนิพจน์ทั่วไปประเภทใดที่ใช้ทุบตี
ฉันใช้RegEx Buddyเพื่อสร้างต้นแบบและดีบักนิพจน์ปกติของฉัน RegEx Buddy อนุญาตให้ฉันเลือกระหว่างชนิดของเอ็นจินนิพจน์ทั่วไปที่แตกต่างกันจำนวนหนึ่ง (. NET, Java, Perl, GNU BRE, GNU ERE, POSIX, BRE, POSIX ERE เป็นต้น) เอ็นจินนิพจน์ทั่วไปใดที่มีการใช้ bash (ตัวอย่างเช่นในifและcaseคำสั่ง) ฉันใช้ Centos 5.5 32 บิตและทุบตี 3.2.25 (1): [kevin@mon01 scratch]$ bash --version GNU bash, version 3.2.25(1)-release (i686-redhat-linux-gnu) Copyright (C) 2005 Free Software Foundation, Inc. ฉันเดาว่ามันจะเป็น GNU BRE หรือ GNU ERE


3
รีโมต for-loop ผ่าน SSH
ฉันมีต่อไปนี้ในสคริปต์ for server in ${servers[@]}; do echo ${server} ssh user@${server} "for i in /tmp/foo* ; do echo ${i}; done" done แต่มันไม่ทำงาน สิ่งประหลาดฉันเห็นจำนวนเงินคืนของจำนวน $ I ดังนั้นถ้าฉันมีสิบไฟล์ฉันเห็นบรรทัดว่างสิบบรรทัด
12 bash  ssh  quoting 

3
วิธีตั้งค่าสคริปต์ให้ทำงานเมื่อพอร์ตได้รับข้อความ
ฉันสงสัยว่าจะได้รับเชลล์สคริปต์เพื่อฟังบนพอร์ตบางอย่าง (อาจใช้ netcat?) หวังว่าเมื่อข้อความถูกส่งไปยังพอร์ตนั้นสคริปต์จะบันทึกข้อความและเรียกใช้ฟังก์ชัน ตัวอย่าง: คอมพิวเตอร์ 1 มีสคริปต์ที่ทำงานในพื้นหลังสคริปต์เปิดพอร์ต 1234 เพื่อรับส่งข้อมูลขาเข้า คอมพิวเตอร์ 2 ส่งข้อความ "hello world" ไปยังพอร์ต 1234 ของคอมพิวเตอร์ 1 สคริปต์บนคอมพิวเตอร์ 1 บันทึกข้อความ "hello world" ไปยังตัวแปร $ MESSAGE สคริปต์เรียกใช้ฟังก์ชันตอนนี้ตัวแปร $ MESSAGE ถูกตั้งค่าแล้ว ฉันจะบริจาคได้อย่างไร

7
ฉันจะพิมพ์อักขระ ASCII ด้วยจุดรหัสที่แตกต่างใน Bash ได้อย่างไร
ในตาราง ASCII มีอักขระ 'J' อยู่ซึ่งมีจุดรหัสในระบบตัวเลขต่าง ๆ : Oct Dec Hex Char 112 74 4A J มันเป็นไปได้ที่จะพิมพ์ถ่านนี้โดยจุดรหัสเลขฐานแปดโดยการพิมพ์ หรือprintf '\112' echo $'\112'ฉันจะพิมพ์ตัวละครเดียวกันโดยนำเสนอทศนิยมและเลขฐานสิบหกจุดได้อย่างไร?
12 bash  shell  ascii 

5
bash + using printf เพื่อพิมพ์ในรูปแบบพิเศษ
ฉันเพิ่งเขียนสคริปต์ทุบตีต่อไปนี้เพื่อตรวจสอบการเข้าถึง ping ในรายการของเครื่อง Linux: for M in $list do ping -q -c 1 "$M" >/dev/null if [[ $? -eq 0 ]] then echo "($C) $MACHINE CONNECTION OK" else echo "($C) $MACHINE CONNECTION FAIL" fi let C=$C+1 done ภาพพิมพ์นี้: (1) linux643 CONNECTION OK (2) linux72 CONNECTION OK (3) linux862 CONNECTION OK …

3
วิธีตรวจสอบจาก bash ว่ามีแพ็คเกจอยู่ใน Debian หรือไม่
ฉันต้องการเขียนสคริปต์ทุบตีการติดตั้งที่ฉันต้องการติดตั้งเซิร์ฟเวอร์ MySQL บน Linux Mint ฉันได้ติดตามโค้ด: apt-get -y --force-yes install mysql-server-5.6 แต่ผมติดตั้งใหม่ Debian 8 และไม่มีmysql-server- mariadbแทนมี ฉันจะทราบได้อย่างไรว่ามีแพ็คเกจอยู่หรือไม่ ฉันเพิ่งรู้ว่ามีสิ่งdpkg -sที่ควรบอกว่ามีการติดตั้งแพคเกจ
12 bash  apt  deb 

8
วิธีการรวมเวลาโดยใช้ทุบตี?
ฉันต้องการทราบจำนวนเวลาทั้งหมดที่กระบวนการต่างๆใช้ในคอมพิวเตอร์ของฉันในการตัดสินใจว่าฉันควรรันที่นั่นหรือในคอมพิวเตอร์ที่แรงกว่า ดังนั้นฉันคาดการณ์เวลาทำงานของแต่ละคำสั่ง ผลลัพธ์ดูเหมือนว่า: process1 00:03:34 process2 00:00:35 process3 00:12:34 ฉันจะรวมคอลัมน์ที่สองเพื่อรับเวลาทำงานทั้งหมดได้อย่างไร ฉันลอง pipping แต่ละบรรทัดผ่าน awk '{sum += $2 } END { print sum } แต่สิ่งนี้ไม่สมเหตุสมผลเนื่องจากค่าไม่ใช่ตัวเลขตามธรรมชาติ
12 bash  time  arithmetic 

4
การฆ่าเชลล์สคริปต์ทำงานในพื้นหลัง
ฉันได้เขียนเชลล์สคริปต์เพื่อตรวจสอบไดเรกทอรีโดยใช้ยูทิลิตี้ inotifywait ของ inotifyt-tools ฉันต้องการให้สคริปต์ทำงานอย่างต่อเนื่องในพื้นหลัง แต่ฉันยังต้องการที่จะหยุดมันเมื่อต้องการ เพื่อให้มันทำงานอย่างต่อเนื่องฉันใช้while true; แบบนี้: while true; do #a set of commands that use the inotifywait utility end ฉันได้บันทึกไว้ในไฟล์/binและทำให้สามารถใช้งานได้ เพื่อให้มันทำงานในพื้นหลังฉันใช้nohup <script-name> &และปิดสถานี ฉันไม่รู้ว่าฉันจะหยุดสคริปต์นี้ได้อย่างไร ฉันได้ดูคำตอบที่นี่และเป็นคำถามที่เกี่ยวข้องอย่างใกล้ชิดมากที่นี่ อัปเดต 1: บนพื้นฐานของคำตอบของ @InfectedRoot ด้านล่างฉันสามารถแก้ปัญหาของฉันโดยใช้กลยุทธ์ต่อไปนี้ ใช้ครั้งแรก ps -aux | grep script_name และใช้sudo kill -9 <pid>เพื่อฆ่ากระบวนการ จากนั้นฉันต้องpgrep inotifywaitและใช้sudo kill -9 <pid>อีกครั้งสำหรับรหัสที่ส่งคืน ใช้งานได้ แต่ฉันคิดว่านี่เป็นวิธีที่ยุ่งฉันกำลังมองหาคำตอบที่ดีกว่า …
12 bash  shell  kill  inotify 

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