Я хотел бы определить псевдоним, который запускает следующие две команды последовательно.
gnome-screensaver
gnome-screensaver-command --lock
Прямо сейчас я добавил
alias lock='gnome-screensaver-command --lock'
на мой .bashrc, но так как я часто блокирую свою рабочую станцию, было бы проще просто набрать одну команду.
bash
configuration
yuriel
источник
источник
lock()
скобках выдает ошибкуsyntax error near unexpected token
msg'` ..$1
,$2
... в теле функции.Другие ответы адекватно отвечают на вопрос, но ваш пример выглядит так, как будто вторая команда зависит от успешного выхода первой команды. Вы можете попробовать оценку короткого замыкания в своем псевдониме:
Теперь вторая команда даже не будет предпринята, пока первая команда не будет успешной. Лучшее описание оценки короткого замыкания описано в этом вопросе SO .
источник
git fetch && git pull origin master
и не работал для меня, пока я не заменил&&
на;
.Псевдонимы предназначены для псевдонимов имен команд. Все, что за этим следует делать с функциями.
Псевдонимы - это имена, которые по-прежнему связаны с исходным именем.
ll
это просто немного специфический видls
.Функция - это новая команда с внутренней логикой. Это не просто переименование другой команды. Это делает внутренние операции.
Технически, псевдонимы в языке оболочки Bash настолько ограничены в возможностях, что крайне плохо подходят для всего, что включает в себя более одной команды . Используйте их для создания небольшой мутации одной команды, не более того.
Поскольку намерение состоит в том, чтобы создать новую команду, которая выполняет операцию, которая будет внутренне разрешаться в других командах, единственный правильный ответ - использовать здесь функцию:
Использование псевдонимов в подобном сценарии сталкивается с множеством проблем. В отличие от функций, которые выполняются как команды, псевдонимы расширяются до текущей команды, что приведет к очень неожиданным проблемам при объединении этого псевдонима «команда» с другими командами. Они также не работают в сценариях.
источник
gps() { git commit -m 'init '; git push; git status; }
Как объяснено, псевдонимы чрезвычайно ограничены, хрупки, и их единственное намерение - переименовать команды. Злоупотребление ими в несвязанных целях приведет к тому, что вы окажетесь в горячей воде, как вы только что испытали.Это не работает?
источник
Это будет запускать 2 команды одну за другой:
источник
Так что используйте точку с запятой:
Это не работает, если вы хотите предоставить аргументы для первой команды. В качестве альтернативы, создайте тривиальный скрипт в вашем каталоге $ HOME / bin.
источник
Добавляя мои 2 цента к дискуссии 11 лет, попробуйте это:
alias lock="gnome-screensaver \gnome-screensaver-command --lock"
источник
Добавьте эту функцию к вашему
~/.bashrc
и перезапустите ваш терминал или запуститеsource ~/.bashrc
Таким образом, эти две команды будут выполняться всякий раз, когда вы вводите
lock
в свой терминал.В вашем конкретном случае создание
alias
может работать, но я не рекомендую его. Интуитивно понятно, что значение псевдонима будет таким же, как если бы вы вводили значение в терминале. Однако это не так:и
Так что не используйте псевдоним, если нет необходимости. https://ss64.com/bash/alias.html
источник
Я столкнулся с проблемой при объявлении псевдонимов в
~/.bashrc
. Мой терминал не распознал псевдонимы, которые я объявил в~/.bashrc
. Из статьи (прикрепленной внизу) я узнал, что Mac OS X запускаетсяlogin-shell
по умолчанию, поэтому она вызывает~/.bash_profile
вместо~/.bashrc
.Если при объявлении псевдонимов вы столкнулись с той же проблемой, вы можете обратиться к следующей ссылке для решения проблемы:
http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html
источник
source .bashrc
после сохранения изменений в файле, чтобы псевдоним был распознан без выхода из системы.