ทุบตีนามแฝงที่มีช่องว่างเป็นส่วนหนึ่งของคำสั่ง


11

ฉันพยายามที่จะสร้างนามแฝงทุบตีที่ชื่อแทนตัวเองมีช่องว่างในนั้น

ความคิดคือนามแฝง (คือcon) sudo openvpn --config /path/to/my/openvpn/configs/ย่อมาจาก ซึ่งส่งผลให้คำสั่งอ่านได้เมื่อใช้conนามแฝง

เช่น: `con uk.conf` == `sudo openvpn --config /path/to/my/openvpn/configs/uk.conf`

con ="sudo openvpn --config /path/to/my/openvpn/configs/"ฉันเข้าใจว่าฉันไม่สามารถประกาศนามแฝงเช่นนี้ ฟังก์ชั่นทุบตีจะทำงานในสถานการณ์นี้หรือไม่ ฉันไม่เคยได้ยินเรื่องนี้มาก่อน แต่เมื่อค้นคว้าวิธีแก้ปัญหาสำหรับปัญหาเล็กน้อยนี้

คำตอบ:


12

ใช่คุณจะต้องใช้ฟังก์ชั่น นามแฝงจะทำงานหากคุณต้องการเพิ่มพารามิเตอร์ข้อโต้แย้งใด ๆ ที่มอบให้กับนามแฝงจะถูกส่งเป็นอาร์กิวเมนต์ของโปรแกรมนามแฝง แต่เป็นพารามิเตอร์แยกต่างหากไม่ใช่เพียงผนวกเข้ากับสิ่งที่มีอยู่ เพื่อแสดง:

$ alias foo='echo bar'
$ foo
bar
$ foo baz
bar baz

ในขณะที่คุณสามารถมองเห็นสิ่งที่สะท้อนความเป็นและไม่ได้bar baz barbazเนื่องจากคุณต้องการเชื่อมต่อค่าที่คุณส่งไปยังพารามิเตอร์ที่มีอยู่คุณจึงต้องมีสิ่งต่อไปนี้:

function com(){ sudo openvpn --config /path/to/my/openvpn/configs/"$@"; }

เพิ่มบรรทัดด้านบนของคุณ~/.bashrcและคุณพร้อมที่จะไป


4
คุณสามารถใช้"$@"แทน"$1"เพื่อให้อาร์กิวเมนต์ที่ตามมาถูกส่งผ่านได้เช่นกัน (ความคิดเห็นทั่วไปอาจไม่เกี่ยวข้องกับกรณีเฉพาะที่นี่)
Toby Speight

@TobySpeight D'oh! ฉันควรคิดอย่างนั้น ขอขอบคุณแก้ไข
terdon

1
@TobySpeight เพียงเพื่อความกระจ่างนั่นหมายความว่าcom uk.conf -something elseจะแปลsudo openvpn --config /path/to/my/openvpn/configs/uk.conf -something elseหรือไม่
TMH

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