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

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

3
มีแบบแผนการตั้งชื่อตัวแปรในเชลล์สคริปต์หรือไม่
MY_VARIABLE=fooภาษาส่วนใหญ่จะมีการตั้งชื่ออนุสัญญาสำหรับตัวแปรสไตล์ที่พบมากที่สุดที่ฉันเห็นในเชลล์สคริปต์คือ นี่เป็นอนุสัญญาหรือเป็นเพียงตัวแปรส่วนกลางเท่านั้น สิ่งที่เกี่ยวกับตัวแปรท้องถิ่นสคริปต์?

5
ทำความเข้าใจกับเครื่องหมายอัศเจรีย์ (!) ในทุบตี
ฉันใช้ history | less เพื่อรับบรรทัดคำสั่งก่อนหน้าและจากตัวเลขทางด้านซ้ายมือฉันพบบรรทัดที่ต้องการซ้ำ (เช่น 22) และทำ !22 ที่พรอมต์คำสั่งและทำงานได้ - ดำเนินการชุดคำสั่งบนบรรทัดที่ฉันทำในเวลานั้น ฉันไม่สามารถทราบได้ว่ามีการใช้เครื่องหมายอัศเจรีย์อะไรในแง่ของการกระทำที่ถูกใช้โดยการทุบตีและตำแหน่งที่จะใช้ จากเอกสารฉันไม่เห็นคำอธิบายที่เป็น 'จับต้องได้'

5
สร้างไฟล์ในขนาดที่กำหนดหรือไม่
example.fileฉันต้องการที่จะสร้างไฟล์ที่มีชื่อ ฉันสามารถใช้ touch example.file แต่ฉันต้องการไฟล์ที่มีขนาด 24MB ฉันตรวจสอบ manpage of touch แล้ว แต่ไม่มีพารามิเตอร์เช่นนี้ มีวิธีง่ายๆในการสร้างไฟล์ที่มีขนาดที่แน่นอนหรือไม่?
106 bash  command-line  files 

4
มีไฟล์เทียบเท่า“ .bashrc” ที่เชลล์อ่านทั้งหมดหรือไม่
เป็น~/.bashrc สถานที่เดียวในการระบุตัวแปรสภาพแวดล้อมเฉพาะผู้ใช้นามแฝงการปรับเปลี่ยนPATHตัวแปร ฯลฯ ? ฉันถามเพราะดูเหมือนว่า~/.bashrcจะเป็นbash- แบบเดียว แต่มีกระสุนชนิดอื่นอยู่ด้วย ...

2
วิธีการเปลี่ยนเส้นทางการส่งออกไปยังไฟล์จากภายใน cron?
ฉันมีสคริปต์การสำรองข้อมูลที่ฉันจำเป็นต้องใช้ในเวลาใดเวลาของวันเพื่อให้ฉันใช้cronสำหรับงานนี้และจากภายใน cron logfileกำลังยังพยายามที่จะเปลี่ยนเส้นทางการส่งออกของสคริปต์การสำรองข้อมูลไปยัง crontab -e */1 * * * * /home/ranveer/backup.sh &>> /home/ranveer/backup.log ในรายการ cron ด้านบนฉันกำลังเปลี่ยนเส้นทางทั้งสองstderr and stdoutไปยังไฟล์บันทึก งาน cron ด้านบนดำเนินการได้ดีตามsyslog และทำงานที่กล่าวถึงในbackup.shไฟล์ แต่ไม่ได้เขียนอะไรลงในไฟล์บันทึก /var/log/syslog Oct 19 20:26:01 ranveer CRON[15214]: (ranveer) CMD (/home/ranveer/backup.sh &>> /home/ranveer/backup.log) เมื่อฉันเรียกใช้สคริปต์จาก cli มันทำงานได้ตามต้องการและเอาท์พุทจะถูกเขียนลงในล็อกไฟล์ ranveer@ranveer:~$ ./backup.sh &>> backup.log ranveer@ranveer:~$ cat backup.log Fri Oct 19 20:28:01 IST 2012 …


3
ไฟล์หลอกสำหรับข้อมูลชั่วคราว
ฉันมักจะต้องการดึงข้อมูลสตริงที่ค่อนข้างสั้น (อาจมีหลายบรรทัด) ไปยังโปรแกรม commandline ซึ่งยอมรับเฉพาะอินพุตจากไฟล์ (เช่น wdiff) ในรูปแบบซ้ำ ๆ แน่ใจว่าฉันสามารถสร้างไฟล์ชั่วคราวอย่างน้อยหนึ่งไฟล์บันทึกสตริงที่นั่นและรันคำสั่งด้วยชื่อไฟล์เป็นพารามิเตอร์ แต่ดูเหมือนว่าฉันว่าขั้นตอนนี้จะไม่มีประสิทธิภาพสูงถ้าข้อมูลถูกเขียนลงดิสก์จริงและอาจเป็นอันตรายต่อดิสก์ได้มากกว่าที่จำเป็นถ้าฉันทำซ้ำขั้นตอนนี้หลายครั้งเช่นถ้าฉันต้องการป้อนข้อความบรรทัดเดียวแบบยาว ไฟล์เพื่อ wdiff มีวิธีแนะนำให้หลีกเลี่ยงสิ่งนี้โดยใช้ไฟล์หลอกเช่นไพพ์เพื่อเก็บข้อมูลชั่วคราวโดยไม่ต้องเขียนลงดิสก์ (หรือเขียนเฉพาะในกรณีที่เกินความยาววิกฤติ) โปรดทราบว่า wdiff รับสองอาร์กิวเมนต์และwdiff <"text".
98 bash  files  pipe 

3
^ x ^ y unix หลอกลวงสำหรับอินสแตนซ์ทั้งหมดในคำสั่งสุดท้ายหรือไม่
หนึ่งในเทคนิค Unix ที่ฉันโปรดปรานคือการ^x^yใช้คำสั่งสุดท้ายและแทนที่อินสแตนซ์แรกของ "x" ด้วย "y" แต่ฉันสงสัยว่าถ้าเป็นเคล็ดลับที่คล้ายกันทำงานเพื่อแทนที่ทุกกรณีของ "x" กับ "Y" ในคำสั่งสุดท้าย?

10
จำคำสั่งแบบครึ่งหนึ่งขณะที่ฉันตรวจสอบบางอย่าง
ฉันมักจะพบว่าตัวเองอยู่ในตำแหน่งต่อไปนี้: ฉันเริ่มพิมพ์คำสั่งยาวที่พรอมต์ bash แต่ครึ่งทางฉันพบว่าฉันต้องตรวจสอบบางสิ่งด้วยคำสั่งอื่น ปัญหานี้เกิดขึ้นเมื่อฉันอยู่ที่คอนโซล (ไม่ใช่ X) ซึ่งมักเป็นเช่นนี้เพราะฉันมีวิธีที่ไม่น่าพอใจดังต่อไปนี้เท่านั้นที่ฉันรู้: Hit ctrl+ alt+ F2และเข้าสู่ระบบอีกคอนโซลเสมือนจริงและหาสิ่งที่ฉันต้องการจากนั้นกลับไปและดำเนินการต่อ ctrl+ a, พิมพ์ echo + space+ enter, ค้นหาสิ่งที่ฉันต้องการ, กด↑จนกว่าฉันจะพบคำสั่ง, ctrl+ a, delx 5, ctrl+ e, และทำต่อไป ไฮไลต์สิ่งที่ฉันพิมพ์จนถึงตอนนี้ด้วยเมาส์ของฉัน (ถ้า gpm ทำงานซึ่งปกติแล้ว) กดctrl+ cเพื่อขัดจังหวะค้นหาสิ่งที่ฉันต้องการในขณะที่ระมัดระวังไม่ใช้เมาส์เพื่อไฮไลต์สิ่งต่าง ๆ จากนั้นกดปุ่มกลางของเมาส์ บนพรอมต์ใหม่และดำเนินการต่อ อธิษฐานต่อพระเจ้าบรรทัดคำสั่งว่าคำสั่งแบบครึ่งคำสั่งจะไม่มีผลกระทบใด ๆ แต่ล้มเหลวและกดปุ่มป้อนอย่างละเอียดจากนั้นค้นหาสิ่งที่ฉันต้องการกดให้แคบลงจนกว่าจะได้รับคำสั่งกลับมาและดำเนินการต่อ กระโดดเข้าสู่ไทม์แมชชีนย้อนเวลากลับไปและเตือนตัวเองให้เริ่มหน้าจอก่อนที่จะเริ่มพิมพ์คำสั่งเดินทางกลับสู่ปัจจุบันกดctrl+ a cค้นหาสิ่งที่ฉันต้องการกดctrl+ a ctrl+aและดำเนินการต่อ ดังนั้นสิ่งที่ฉันอยากรู้คือมีวิธีที่สง่างามกว่านี้บ้างไหม? ประเภทของคำสั่ง subshell หรือคล้ายกัน? ฉันสนใจวิธีการที่ไม่ต้องการการเตรียมการหรือการตั้งค่าใด …
97 bash  command-line  zsh 

5
ความแตกต่างระหว่าง“ function foo () {}” และ“ foo () {}”
ฉันสามารถกำหนดbashฟังก์ชั่นการใช้หรือละเว้นfunctionคำหลักได้ มีความแตกต่างหรือไม่? #!/bin/bash function foo() { echo "foo" } bar() { echo "bar" } foo bar ทั้งการเรียกใช้ฟังก์ชันfooและbarประสบความสำเร็จและฉันไม่เห็นความแตกต่างเลย ดังนั้นฉันสงสัยว่ามันเป็นเพียงเพื่อปรับปรุงการอ่านหรือมีบางสิ่งที่ฉันขาดหายไป ... BTW ในเชลล์อื่น ๆ เช่นdash(เชื่อม/bin/shโยงกับdashเดเบียน / Ubuntu) มันล้มเหลวเมื่อใช้functionคำหลัก
96 bash  shell  function  posix 

5
ประวัติของ bash ถูกเก็บไว้ที่ไหน?
ถ้าฉันเรียกใช้historyฉันสามารถดูคำสั่งที่เรียกใช้ล่าสุดของฉันได้ แต่ถ้าฉันทำtail -f $HISTFILEหรือtail -f ~/.bash_historyพวกเขาไม่ได้อยู่ในรายการ ไฟล์ถูกล็อคหรือไม่มีตำแหน่งชั่วคราวหรือคล้ายกัน

2
วงเล็บใส่คำสั่งลงใน subshell หรือไม่?
จากสิ่งที่ฉันได้อ่านการวางคำสั่งในวงเล็บควรเรียกใช้ใน subshell คล้ายกับการเรียกใช้สคริปต์ ถ้าเป็นจริงมันจะเห็นตัวแปร x ถ้า x ไม่ถูกส่งออกได้อย่างไร x=1 การรัน(echo $x)บนบรรทัดคำสั่งจะส่งผลให้ 1 การรันecho $xสคริปต์จะไม่ส่งผลอะไรตามที่คาดไว้

4
วิธีรวมเงื่อนไข 2-name เข้ากับ find
ฉันต้องการค้นหาไฟล์ที่ไม่ตรงกับ 2 -nameเงื่อนไข ฉันสามารถทำมันได้เช่น: find /media/d/ -type f -size +50M ! -name "*deb" ! -name "*vmdk" และสิ่งนี้จะให้ผลลัพธ์ที่เหมาะสม แต่ฉันสามารถเข้าร่วม 2 เงื่อนไขกับหรืออย่างใด?
94 bash  shell  find 

18
มีวิธีการรับ min, max, มัธยฐานและค่าเฉลี่ยของรายการตัวเลขในคำสั่งเดียวหรือไม่?
ฉันมีรายการตัวเลขในไฟล์หนึ่งรายการต่อบรรทัด ฉันจะรับค่าต่ำสุดสูงสุดค่ามัธยฐานและค่าเฉลี่ยได้อย่างไร ฉันต้องการใช้ผลลัพธ์ในสคริปต์ทุบตี แม้ว่าสถานการณ์ปัจจุบันของฉันจะเป็นจำนวนเต็ม แต่วิธีแก้ปัญหาสำหรับเลขทศนิยมจะเป็นประโยชน์ในบรรทัด
93 bash  awk  arithmetic  bc 

6
ฉันจะล้างประวัติเทอร์มินัลได้อย่างไร
ฉันใช้ Linux Mint 17.1 Rebecca เป็นเวลาประมาณ 2 วันและพิมพ์รหัสผ่านของฉันลงในเทอร์มินัลโดยไม่ได้ตั้งใจซึ่งจะปรากฏในรายการประวัติคำสั่งที่ฉันได้พิมพ์ไว้ก่อนหน้านี้ ฉันต้องการล้างประวัติเทอร์มินัลอย่างสมบูรณ์ ฉันได้ลองใช้คำสั่งต่อไปนี้ใน terminal ซึ่งฉันคิดว่าจะล้างประวัติตลอดไป แต่พวกเขาไม่ได้: history -c reset tput reset คำสั่งข้างต้น "จะ" ล้างประวัติจากเทอร์มินัล แต่เมื่อฉันออกและนำขึ้นใหม่ทั้งหมดประวัติก่อนหน้าของฉันยังคงอยู่ที่นั่นและสามารถแสดงรายการอีกครั้งโดยใช้ - คำสั่งประวัติศาสตร์และด้วยการกดลูกศรขึ้นบนแป้นพิมพ์ . ฉันไม่ต้องการให้สิ่งนี้เกิดขึ้นจนกว่าฉันจะล้างประวัติทั้งหมดของฉันแล้วฉันต้องการใช้มันต่อไป ฉันจะล้างประวัติเทอร์มินัลทั้งหมด - ตลอดไปและเริ่มต้นใหม่ได้อย่างไร โปรดทราบ: ฉันไม่ต้องการที่จะออกจากสถานีโดยไม่ต้องบันทึกประวัติศาสตร์เพียงแค่ล้างมันตลอดไปในกรณีนี้

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