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

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

4
วิธีการรับ N คำสั่งสุดท้ายจากประวัติ
historyผมต้องการที่จะเห็นสิ่งที่เป็นคำสั่งที่ไม่มีข้อความสุดท้ายในของฉัน ฉันคิดว่าhistory | tail -n 5จะทำ แต่ฉันสังเกตเห็นว่าคำสั่งหลายบรรทัดนับเป็นหลายบรรทัดตามที่มี $ echo "hello how are you" $ history | tail -2 how are you" 1051 history | tail -2 ดังนั้นคำถามของฉันคือฉันต้องแยกวิเคราะห์ผลลัพธ์ของคำสั่งเพื่อทำสิ่งนี้ให้สำเร็จหรือไม่?

2
Bash มีคุณสมบัติที่คล้ายกันเช่นการบันทึกอัตโนมัติและการเน้นของปลาหรือไม่?
ฉันเพิ่งสังเกตเห็น 2 คุณสมบัติในปลาและสงสัยว่าใครรู้ว่าสิ่งเหล่านี้ยังมีอยู่ใน Bash? การเน้นไวยากรณ์ ข้อมูลจำเพาะ: คุณจะสังเกตเห็นได้อย่างรวดเร็วว่าปลาทำการเน้นไวยากรณ์ขณะที่คุณพิมพ์ คำสั่งที่ไม่ถูกต้องจะมีสีแดงตามค่าเริ่มต้น: คำสั่งอาจไม่ถูกต้องเนื่องจากไม่มีอยู่หรืออ้างถึงไฟล์ที่คุณไม่สามารถดำเนินการได้ เมื่อคำสั่งใช้ได้ถูกต้องคำสั่งนั้นจะปรากฏเป็นสีอื่น fish จะขีดเส้นใต้พา ธ ไฟล์ที่ถูกต้องขณะที่คุณพิมพ์ สิ่งนี้บอกคุณว่ามีไฟล์ที่ขึ้นต้นด้วย 'somefi' ซึ่งเป็นข้อเสนอแนะที่มีประโยชน์เมื่อคุณพิมพ์ แนะนำอัตโนมัติ ข้อมูลจำเพาะ: fish แนะนำคำสั่งในขณะที่คุณพิมพ์และแสดงคำแนะนำทางด้านขวาของเคอร์เซอร์เป็นสีเทา มันรู้เส้นทางและตัวเลือก หากต้องการยอมรับคำแนะนำอัตโนมัติให้กดลูกศรขวาหรือ Control-F หากการบันทึกอัตโนมัติไม่ใช่สิ่งที่คุณต้องการเพียงแค่เพิกเฉย
37 bash  shell  fish 


4
ฉันจะลบเลขศูนย์นำออกจากผลลัพธ์ของ 'วันที่' หรือหลีกเลี่ยงการตีความเลขฐานแปดของเลขทศนิยมดังกล่าวได้อย่างไร
ฉันมีสิ่งนี้: date +"%H hours and %M minutes" ฉันใช้เทศกาลเพื่อบอกว่ามัน .. แต่มันบอกว่า: "ศูนย์เก้าชั่วโมง" .. ฉันอยากให้มันพูดว่า "เก้าชั่วโมง"! แต่วันที่ให้ฉัน 09 เสมอ ... ดังนั้นฉันสงสัยว่า bash สามารถทำให้กลายเป็นเพียงแค่ 9 ได้หรือไม่? ในสคริปต์ที่ซับซ้อนฉันพยายาม printf %d 09 แต่มันล้มเหลว .. ไม่ใช่เลขฐานแปด :( ความคิดใด ๆ
37 bash  shell  date  arithmetic 

4
ฉันจะค้นหาประกาศนามแฝงปลอมได้อย่างไร
ฉันพยายามที่จะหาที่เฉพาะเจาะจงaliasได้รับการประกาศ ฉันได้ค้นหาสถานที่ตามปกติทั้งหมดที่ฉันรู้ว่าจะหาชื่อแทน: ~ / .bashrc ~ / .bash_profile / etc / bashrc / etc / รายละเอียด โดยไม่มีโชค ฉันรู้ว่ามันเป็นaliasเพราะเมื่อฉันทำwhich COMMANDฉันได้รับ: alias COMMAND='/path/to/command' /path/to/command มีวิธีการค้นหาไฟล์ที่ประกาศaliasเพียงรู้aliasชื่อหรือไม่?
37 bash  alias  bashrc 

4
วิธีเปิดใช้งานการเติมข้อความอัตโนมัติสำหรับเส้นทางระยะไกลเมื่อใช้ scp?
ฉันรีโมตคัดลอกไฟล์ไปยังแล็ปท็อปของฉันโดยใช้: scp someFile USER@192.168.178.32:/home/USER/put/it/some/where/oh/damn/you/here ฉันต้องการที่จะเติมข้อความอัตโนมัติเส้นทางระยะไกลโดยการกดปุ่มแท็บ
37 bash  ssh  autocomplete 

1
หลีกเลี่ยง“ BASH-isms” ในเชลล์สคริปต์
มีเครื่องมือที่คล้ายกับPerl :: Critic หรือไม่ที่จะตรวจสอบเชลล์สคริปต์ของคุณและชี้ให้เห็นข้อบกพร่องปัญหาเกี่ยวกับการพกพาการใช้งานโปรแกรมที่ไม่ได้มาตรฐานโดยไม่มีข้อผิดพลาด ฉันรู้ว่าset -o posixจะปิดใช้งานการใช้งานที่ไม่ใช่ POSIX แต่จะไม่บอกสิ่งที่ฉันต้องการทราบเช่นอาร์เรย์เชลล์ดัชนี zsh เริ่มต้นที่ 1 และทุบตีจาก 0 และเถ้าไม่สนับสนุนอาร์เรย์เลย
37 bash  shell  zsh  ash 

3
ขีดกลางใน printf
ฉันพยายามใช้ printf เพื่อจัดรูปแบบเอาต์พุตสวย ๆ ในสคริปต์ทุบตี เช่น: ----------------------- | This is some output | ----------------------- แต่ฉันได้พบพฤติกรรมบางอย่างที่ฉันไม่เข้าใจ $ printf "--" ทำให้ฉันมีข้อผิดพลาด printf: usage: printf [-v var] format [arguments] และ $ printf "-stuff"ผลลัพธ์ใน-bash: printf: -s: invalid option เห็นได้ชัดว่า printf คิดว่าฉันกำลังพยายามผ่านข้อโต้แย้งบางอย่างในขณะที่ฉันไม่ได้ ในขณะเดียวกันโดยบังเอิญฉันพบวิธีแก้ปัญหานี้: $ printf -- "--- this works now ----\n"ให้ฉัน--- this works now ---- …
37 bash 

2
EOF ที่ไม่คาดคิดขณะค้นหาการจับคู่ `" '- สคริปต์ทุบตี
ฉันเพิ่งเขียนสคริปต์ bash และรับ EOF-Error นี้เสมอ ดังนั้นนี่คือสคริปต์ของฉัน (ใช้ได้กับ OS X เท่านั้น): #!/bin/bash #DEFINITIONS BEGIN en_sq() { echo -e "Enabling smart quotes..." defaults write NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool true status=$(defaults read NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool) if [ "$status" = "1" ] then echo -e "Success! Smart quotes are now enabled." SUCCESS="TRUE" else echo -e …
37 bash  shell 

5
การใช้วันที่ / เวลาของระบบใน Cron Script
ฉันกำลังตั้งค่า Cronjob ที่จะสำรองฐานข้อมูล MySQL ที่ฉันมีในเซิร์ฟเวอร์ของฉัน แต่ฉันไม่ต้องการให้มันเขียนทับไฟล์เดียวกันซ้ำแล้วซ้ำอีก แต่ฉันต้องการให้มีชุดข้อมูลสำรองมากมายให้เลือกทำโดยอัตโนมัติ ตัวอย่างเช่น: ## Cronjob, run May 21st, 2011: mysqldump -u username -ppasword database > /path/to/file/21-03-2011.sql ## SAME Conjob, run May 28th, 2011: mysqldump -u username -ppasword database > /path/to/file/28-03-2011.sql และอื่น ๆ มีวิธีใดบ้างที่ฉันสามารถใช้วันที่และ / หรือเวลาของระบบเป็นตัวแปรบางอย่างใน Cronjob ของฉัน ถ้าไม่คำแนะนำของคุณที่จะทำให้เหมือนกันคืออะไร?
37 bash  terminal  cron 

2
การเติมข้อความอัตโนมัติของเทอร์มินัล: วนผ่านข้อเสนอแนะ
ฉันมีสิ่งนี้ในการตั้งค่า Ubuntu ของฉันและตั้งแต่ฉันเปลี่ยนเป็น Fedora ฉันต้องการตั้งค่าและฉันลืมว่า ... แนวคิดนี้ง่าย: ฉันไม่ต้องการให้เทอร์มินัลแสดงคำแนะนำให้ฉันเมื่อฉันเพิ่มเป็นสองเท่าtabแต่ฉันต้องการให้มันหมุนเวียนไปตามคำแนะนำที่เป็นไปได้ทุกครั้งที่มีการกดแต่ละครั้งtab... สิ่งนี้สามารถทำได้ใน Vim ด้วย ดังนั้นเมื่อผมพิมพ์gedit aและกดมันจะแสดงให้ฉันทุกไฟล์ที่มีตัวอักษรตัวแรกtaba

1
เราควรใช้อักขระ UTF-8 อย่าง⏰ใน bash / shell script หรือไม่?
รหัสง่าย ๆ ที่นี่ทำงานตามที่คาดไว้ในเครื่องของฉันหากเปิดตัวด้วยbash: function ⏰(){ date } ⏰ มีปัญหาสำหรับคนอื่นที่ใช้สิ่งนี้หรือเป็นสากลหรือไม่? ฉันสงสัยเพราะฉันไม่เคยเห็นอะไรแบบนี้ในซอร์สโค้ดอื่นในตอนนี้ แก้ไข: มีความเป็นไปได้ไม่ จำกัด สามารถใช้เพื่อแยกแยะบทบาทของฟังก์ชันกับการใช้อีโมจิได้อย่างรวดเร็ว A 💣สำหรับบางสิ่งที่สามารถแก้ไขหรือลบไฟล์ได้ a หากอยู่ในระหว่างดำเนินการ📃สำหรับเมนูแบบโต้ตอบ ... ฉันเดาว่าเราควรสร้างมาตรฐานสำหรับสิ่งเหล่านั้น แต่ดูเหมือนจะเป็นแนวคิดที่น่าสนใจ บางทีการสุ่มบรรทัดของอักขระ 5 ~ สามารถช่วยให้เราเข้าใจมากว่ารหัสกำลังทำอะไรอยู่ (แน่นอนเราต้องเรียนรู้วิธีอ่าน) แก้ไขเพิ่มเติม: ฉันให้มันยิง สำหรับตอนนี้ถ้าฉันพับฟังก์ชั่นทั้งหมดของฉันในโปรแกรมแก้ไข (หรือcat myscript.sh|grep function) พวกเขาจะมีลักษณะเช่นนี้ (ยูนิโค้ดของฉันดูดีขึ้นมากgeanyหรือเทอร์มินัลของฉันเมื่อเทียบกับที่นี่) function ⬚_1(){ function ⬚⬚_2(){ function ⬚⬚⬚_📃_D(){ function ⬚⬚⬚⬚_📃_X(){ function ⬚⬚⬚⬚⬚_📃_Y(){ function ⬚⬚⬚⬚⬚⬚_❓_P(){ function ⬚⬚⬚⬚_📃_Z(){ function ⬚⬚⬚⬚⬚_❓_U(){ …
36 bash  shell  unicode 

3
เหตุใดการเปิดไฟล์จึงเร็วกว่าการอ่านเนื้อหาตัวแปร
ในbashสคริปต์ฉันต้องการค่าต่าง ๆ จาก/proc/ไฟล์ จนถึงตอนนี้ฉันมีหลายสิบบรรทัด grepping ไฟล์โดยตรงเช่นนั้น: grep -oP '^MemFree: *\K[0-9]+' /proc/meminfo ในความพยายามที่จะทำให้มีประสิทธิภาพมากขึ้นฉันบันทึกเนื้อหาของไฟล์ไว้ในตัวแปรแล้วทำสิ่งต่อไปนี้: a=$(</proc/meminfo) echo "$a" | grep -oP '^MemFree: *\K[0-9]+' แทนที่จะเปิดไฟล์หลายครั้งควรเปิดเพียงครั้งเดียวและ grep เนื้อหาตัวแปรซึ่งฉันคิดว่าน่าจะเร็วกว่า - แต่อันที่จริงมันช้ากว่า: bash 4.4.19 $ time for i in {1..1000};do grep ^MemFree /proc/meminfo;done >/dev/null real 0m0.803s user 0m0.619s sys 0m0.232s bash 4.4.19 $ a=$(</proc/meminfo) bash 4.4.19 $ …

2
ใช้. sh หรือ. bash extension สำหรับสคริปต์ทุบตี?
(ดูการใช้ #! / bin / sh หรือ #! / bin / bash สำหรับความเข้ากันได้ของ Ubuntu-OSX และใช้งานง่าย & POSIX ) ถ้าฉันต้องการให้สคริปต์ของฉันใช้ bash shell ให้ใช้ส่วนขยาย. bash จริง ๆ แล้วเรียกใช้ bash หรือขึ้นอยู่กับ system config / 1st shebang line หากทั้งคู่มีผล แต่แตกต่างกันซึ่งจะมีความสำคัญกว่ากัน ฉันไม่แน่ใจว่าจะจบสคริปต์ด้วย. sh เพียงแค่ระบุ "shell script" จากนั้นให้บรรทัดแรกเลือก bash shell (เช่น#!/usr/bin/env bash) หรือว่าจะจบด้วยbash (เช่นเดียวกับการตั้งค่าบรรทัด 1) ) …
36 bash  shell  shebang 


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