Есть ли способ псевдонима многопользовательской команды в Unix?

11

Я пытаюсь создать псевдоним команды, sudo shutdownно .profileя не могу просто выполнить alias "sudo shutdown"="my command". Есть ли другой способ для псевдонима многопоточных команд в Unix?

agentbanks217
источник
Я опробовал все эти методы, и все они работали! Спасибо всем!
agentbanks217
Попробуйте также решение в моем редактировании , так как я понял, что вы действительно намеревались использовать 'sudo shutdown' в качестве псевдонима слишком поздно.

Ответы:

19

Псевдоним находится слева, поэтому вы можете использовать любую многопользовательскую команду справа:

alias my_alias="multi worded command"

РЕДАКТИРОВАТЬ: Однако, если вы действительно хотите иметь псевдонимы имен из нескольких слов - в вашем примере, если вы действительно хотите, чтобы «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случай, чтобы исходная команда barfoo() { if [ "$1" = "bar" ]; then echo "doing something..."; else command foo "$@"; fi; }
выполнялась,
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
abalter
источник
1

Вы можете использовать тире в качестве обходного пути: alias sudo-shutdown="your command"

armandino
источник
1

Я предпочитаю просто поместить исполняемый файл в / usr / local / bin (убедитесь, что он находится на вашем пути), который затем содержит команды, которые я хочу выполнить. Имя сценария будет командой, которая появляется. не забудьте chmod + x / usr / local / bin / your_script.

Таким образом, сценарий можно назвать «выключение»

Содержимое файла выключения будет:

#!/bin/sh
sudo shutdown

Это открывает целый новый мир. Затем вы можете получить пару команд или даже скрипт:

#!/usr/bin/env python
print "hi"
# more stuff. ....

источник