วิธีสร้างนามแฝงด้วยคำสั่งประกอบด้วย 'และ "


10

มีบางโพสต์ที่ผ่านมามีคนถามวิธีแสดงหน่วยความจำเป็นเปอร์เซ็นต์ มีคนตอบกลับด้วย:

free | awk '/^Mem/ { printf("free: %.2f %\n", $4/$2 * 100.0) }'

ฉันสงสัยว่าฉันสามารถเปลี่ยนคำสั่งนี้เป็นชื่อแทนใน ~ / .bashrc หรือไม่ แต่ไวยากรณ์ของนามแฝงคือ:

alias aliasname='command'

ฉันจะทำสิ่งนี้ได้อย่างไร ที่มีทั้งคำสั่งและ' "ฉันลองใช้วิธีการต่าง ๆ แต่มันไม่ทำงาน เป็นไปได้ไหม ฉันพลาดอะไรไปรึเปล่า?


5
เพื่อหลีกเลี่ยงการกล่าวถึงนรกมันอาจง่ายกว่าที่จะกำหนดฟังก์ชั่นในกรณีเช่นนี้
nohillside

1
@nohillside ฟังก์ชั่นโดยทั่วไปมีประโยชน์มากขึ้น / มีประสิทธิภาพอยู่แล้ว
D. Ben Knoble

1
aliasname() { free | awk '/^Mem/ { printf("free: %.2f %\n", $4/$2 * 100.0) }'; }- ยังคงเป็นเพียงหนึ่งบรรทัดไม่มีการเปลี่ยนแปลงในการอ้างอิง / หลบหนี / ฯลฯ ที่จำเป็น มีเหตุผลที่ฟรีโนด #bash ช่องเป็น!aliasfactoid คือ (ดีเป็น : แต่สำหรับที่สุดในชีวิตของบอ factoid ของตัวแปรของบางคน) หากคุณมีการขอใช้ฟังก์ชั่นแทน
Charles Duffy

คำตอบ:


8

คุณต้องการ:

alias aliasname="free | awk '/^Mem/ { printf(\"free: %.2f %\n\", \$4/\$2 * 100.0) }'"

ขอให้สังเกตว่าคุณต้องหนีทั้งสองและ"$


17

การบอกว่าไวยากรณ์ของนามแฝงนั้นalias aliasname='command'ทำให้เข้าใจผิดเล็กน้อยเนื่องจากดูเหมือนว่ามีความหมายว่าเครื่องหมายคำพูดเดี่ยวเป็นส่วนหนึ่งของไวยากรณ์ พวกเขาจะไม่. ส่วนหลังเครื่องหมายเท่ากับจะคล้ายกับการกำหนดตัวแปรซึ่งสามารถเป็นคำของเชลล์ใด ๆซึ่งประกอบด้วยอักขระธรรมดา (โดยไม่ใส่เครื่องหมายอัญประกาศ) หรือสตริงที่ยกมาหรือชุดค่าผสม

สิ่งเหล่านี้ใช้ได้ทั้งหมดและเทียบเท่าสามครั้งสุดท้าย:

alias ks=ls
alias ls='ls -l'
alias ls="ls -l"
alias ls=ls\ -l

ดังนั้นสิ่งที่คุณต้องทำคือการหลีกเลี่ยงการพูดที่ถูกต้องเพื่อให้มันอยู่ในค่านามแฝง

ดูเช่นคำตอบนี้และคำตอบอื่น ๆ เช่นคำถามเหล่านี้สำหรับการอภิปรายใน:

หรือใช้ฟังก์ชันแทนนามแฝงเพื่อกำจัดปัญหาที่อ้างถึงอย่างสมบูรณ์:

freemem() {
    free | awk '/^Mem/ { printf("free: %.2f %\n", $4/$2 * 100.0) }'
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.