มีวิธีการนามแฝงคำสั่งหลายคำใน Unix หรือไม่?


11

ฉันพยายามที่จะนามแฝงคำสั่งsudo shutdownแต่ของฉันฉันไม่สามารถเพียงแค่ทำ.profile alias "sudo shutdown"="my command"มีวิธีอื่นในการใช้นามแฝงคำสั่งที่มีหลายคำใน Unix หรือไม่?


ฉันลองใช้เทคนิคเหล่านี้ทั้งหมดและพวกเขาก็ใช้ได้! ขอบคุณทุกคน!
agentbanks217

ลองวิธีแก้ปัญหาในการแก้ไขของฉันด้วยเพราะฉันรู้ว่าคุณตั้งใจจะให้ 'sudo shutdown' เป็นนามแฝงช้าไปหน่อย

คำตอบ:


19

ชื่อนามแฝงอยู่ทางซ้ายมือดังนั้นคุณสามารถมีคำสั่งหลายคำทางขวา:

alias my_alias="multi worded command"

แก้ไข: อย่างไรก็ตามหากคุณต้องการให้ชื่อแทนหลายคำ - ในตัวอย่างของคุณหากคุณต้องการให้ "sudo shutdown" เป็นนามแฝงคุณสามารถแก้ไขได้โดยใช้คุณสมบัตินามแฝงต่อไปนี้ (ในคู่มือทุบตี ):

A trailing space in  value causes the next word to be checked for
alias substitution when the alias is expanded.

ดังนั้นหากคุณยังต้องการใช้sudoกับคำสั่งอื่น แต่ไม่ใช้shutdownและถ้าคุณสามารถที่จะใช้นามแฝงshutdownกับสิ่งอื่นคุณสามารถมี:

alias sudo='sudo '
alias shutdown="echo nope"

ตอนนี้sudo anything_elseจะทำงานได้ตามที่คาดไว้ (สมมติว่าคุณไม่มีนามแฝงanything_elseแต่ถ้าคุณมีก็ไม่ได้ทำงานมาก่อน) แต่sudo shutdownจะเทียบเท่าsudo echo nopeและจะพิมพ์สตริงนั้น


2
ขอบคุณคำตอบที่ประเมินต่ำเกินไป ฉันใช้alias cd="cd "นามแฝงตัวอักษรเดียวalias X="<directory-with-long-name>"เพื่อข้ามจากที่หนึ่งไปอีกที่หนึ่งได้ง่ายขึ้น
ลุคเดวิส

เห็นด้วยว่านี่เป็นประโยชน์จริง ๆ ฉันพิมพ์คำสั่ง git ผิดนี่ก็แก้ได้สำหรับฉัน: alias gti="git "และalias lgo="log"
BananaNeil

4

ใช้ฟังก์ชั่น:

foo() { if [ "$1" = "bar" ]; then echo "doing something..."; fi; }

คุณอาจต้องการelseเคสเพื่อให้คำสั่งดั้งเดิมรันหากพารามิเตอร์ที่สองไม่ใช่ bar :foo() { if [ "$1" = "bar" ]; then echo "doing something..."; else command foo "$@"; fi; }
davidg

2

อ้างจาก: Bash: Spaces ในชื่อนามแฝง

เอกสารคู่มือBashระบุว่า "สำหรับเกือบทุกวัตถุประสงค์ฟังก์ชั่นเชลล์เป็นที่ต้องการมากกว่าชื่อแทน" นี่คือฟังก์ชั่นเปลือกที่มาแทนที่lsและสาเหตุการส่งออกจะได้รับการประปาmoreถ้าอาร์กิวเมนต์ประกอบด้วย -la(เท่านั้น)

ls() {
    if [[ $@ == "-la" ]]; then
        command ls -la | more
    else
        command ls "$@"
    fi
}

ในฐานะที่เป็นหนึ่งซับ:

ls() { if [[ $@ == "-la" ]]; then command ls -la | more; else command ls "$@"; fi; }

ส่งออกท่ออัตโนมัติ:

ls -la


1

ฉันชอบใส่ไฟล์ปฏิบัติการใน / usr / local / bin (ต้องแน่ใจว่าอยู่ในพา ธ ของคุณ) ที่มีคำสั่งที่ฉันต้องการเรียกใช้ ชื่อของสคริปต์จะเป็นคำสั่งที่เกิดขึ้น ต้องแน่ใจว่าได้ chmod + x / usr / local / bin / your_script

ดังนั้นสคริปต์อาจถูกเรียกว่า 'ปิดระบบ'

เนื้อหาของการปิดระบบไฟล์จะเป็น:

#!/bin/sh
sudo shutdown

ที่เปิดโลกใหม่ทั้งหมด จากนั้นคุณสามารถมีคำสั่งคู่หรือแม้แต่สคริปต์:

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