Có cách nào để bí danh một lệnh nhiều từ trong Unix không?


11

Tôi đang cố gắng để bí danh lệnh sudo shutdownnhưng trong tôi .profilekhông thể làm được alias "sudo shutdown"="my command". Có cách nào khác để bí danh các lệnh nhiều từ trong Unix không?


Tôi đã thử tất cả các kỹ thuật này và tất cả chúng đều hoạt động! Cảm ơn mọi người!
agentbanks217

Hãy thử giải pháp trong bản chỉnh sửa của tôi , vì tôi nhận ra rằng bạn thực sự có ý định tắt 'sudo shutdown' như một bí danh quá muộn.

Câu trả lời:


19

Tên bí danh nằm ở phía bên trái, vì vậy bạn có thể có bất kỳ lệnh đa từ nào ở bên phải:

alias my_alias="multi worded command"

EDIT: Tuy nhiên, nếu bạn thực sự muốn có tên bí danh của nhiều từ - trong ví dụ của bạn, nếu bạn thực sự muốn "sudo shutdown" là bí danh, bạn có thể xử lý vấn đề này bằng cách sử dụng tính năng bí danh sau (trong hướng dẫn bash ):

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

Vì vậy, nếu bạn vẫn muốn sử dụng sudovới các lệnh khác nhưng không phải với shutdownvà nếu bạn có đủ khả năng bí danh shutdowncho một thứ khác, bạn có thể có:

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

Bây giờ, sudo anything_elsesẽ hoạt động như mong đợi (giả sử bạn không có bí danh anything_else, nhưng nếu bạn có thì nó cũng không hoạt động trước đó); nhưng sudo shutdownsẽ tương đương sudo echo nopevà nó sẽ in chuỗi đó.


2
Cảm ơn, trả lời đánh giá thấp; Tôi đã sử dụng alias cd="cd "các bí danh một chữ cái alias X="<directory-with-long-name>"để nhảy từ nơi này sang nơi khác dễ dàng hơn.
Luke Davis

Đồng ý, điều này thực sự siêu hữu ích. Tôi gõ sai lệnh git, điều này giải quyết điều đó cho tôi: alias gti="git "alias lgo="log"
BananaNeil

4

Sử dụng một chức năng:

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

Bạn có thể muốn có một elsetrường hợp để lệnh ban đầu chạy nếu tham số thứ hai không bar :foo() { if [ "$1" = "bar" ]; then echo "doing something..."; else command foo "$@"; fi; }
davidg 20/03/18

2

Để trích dẫn từ: Bash: Spaces in alias name

Các tài liệu Bash bang "Đối với hầu hết các mục đích, chức năng vỏ được ưa thích hơn bí danh." Đây là một hàm shell thay thế lsvà làm cho đầu ra được dẫn đến morenếu đối số chỉ bao gồm (chỉ) -la.

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

Như một lớp lót:

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

Tự động đầu ra đường ống:

ls -la

1

Bạn có thể sử dụng dấu gạch ngang như một công việc xung quanh: alias sudo-shutdown="your command"


1

Tôi thích chỉ đặt một tệp thực thi trong / usr / local / bin (hãy chắc chắn rằng đó là trong đường dẫn của bạn) sau đó chứa các lệnh tôi muốn chạy. Tên của kịch bản sẽ là lệnh xuất hiện. hãy chắc chắn để chmod + x / usr / local / bin / your_script.

Vì vậy, kịch bản có thể được gọi là 'tắt máy'

Nội dung tắt máy sẽ là:

#!/bin/sh
sudo shutdown

Điều đó mở ra một thế giới hoàn toàn mới. Sau đó, bạn có thể có một vài lệnh hoặc thậm chí một tập lệnh:

#!/usr/bin/env python
print "hi"
# more stuff. ....
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.