Чи є спосіб псевдоніму багатословної команди в Unix?


11

Я намагаюся отримати псевдонім команду, sudo shutdownале в моєму .profileне можу просто зробити alias "sudo shutdown"="my command". Чи існує інший спосіб псевдоніму багатословних команд в Unix?


Я випробував усі ці методи, і всі вони працювали! Дякую всім!
agentbanks217

Спробуйте також рішення в моєму редагуванні , оскільки я зрозумів, що ви насправді мали намір "відключити судо" як псевдонім трохи пізно.

Відповіді:


19

Псевдонім ім’я знаходиться в лівій частині, тому ви можете мати будь-яку багатоскладну команду праворуч:

alias my_alias="multi worded command"

EDIT: Однак якщо ви дійсно хочете мати псевдоніми назви кількох слів - у вашому прикладі, якщо ви дійсно хочете, щоб "sudo shutdown" був псевдонімом, ви можете обійти це за допомогою наступної функції псевдоніму (у посібнику з bash ):

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: Пробіли в псевдонімі назви

У документації 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. ....
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.