Ответ 1
Try:
alias lock='gnome-screensaver; gnome-screensaver-command --lock'
или
lock() {
gnome-screensaver
gnome-screensaver-command --lock
}
в вашем .bashrc
Второе решение позволяет использовать аргументы.
Я хотел бы определить псевдоним, который последовательно выполняет следующие две команды.
gnome-screensaver
gnome-screensaver-command --lock
Сейчас я добавил
alias lock='gnome-screensaver-command --lock'
для моего .bashrc, но так как я блокирую свою рабочую станцию так часто, было бы проще просто набрать одну команду.
Try:
alias lock='gnome-screensaver; gnome-screensaver-command --lock'
или
lock() {
gnome-screensaver
gnome-screensaver-command --lock
}
в вашем .bashrc
Второе решение позволяет использовать аргументы.
Другие ответы отвечают на вопрос адекватно, но ваш пример выглядит так, как вторая команда зависит от успешного завершения первого. Вы можете попробовать короткое замыкание в своем псевдониме:
alias lock='gnome-screensaver && gnome-screensaver-command --lock'
Теперь вторая команда даже не будет предпринята, если первая из них не будет успешной. Более подробное описание оценки короткого замыкания описано в этом вопросе fooobar.com/questions/47126/....
Псевдонимы предназначены для имен команд псевдонимов. Все, что должно быть сделано, должно выполняться с помощью функций.
alias ll='ls -l' # The ll command is an alias for ls -l
Псевдонимы - это имена, которые все еще связаны с исходным именем. ll
является лишь немного специфическим типом ls
.
d() {
if exists colordiff; then
colordiff -ur "[email protected]"
elif exists diff; then
diff -ur "[email protected]"
elif exists comm; then
comm -3 "$1" "$2"
fi | less
}
Функция - это новая команда с внутренней логикой. Это не просто переименование другой команды. Он выполняет внутренние операции.
Технически, псевдонимы на языке оболочки Bash настолько ограничены в возможностях, что они чрезвычайно плохо подходят для всего, что включает в себя более одну команду. Используйте их для создания небольшой мутации одной команды, не более того.
Поскольку мы намерены создать новую команду, которая выполняет операцию, которая внутренне разрешит в других командах, единственный правильный ответ заключается в использовании функции здесь:
lock() {
gnome-screensaver
gnome-screensaver-command --lock
}
Использование псевдонимов в подобном сценарии сталкивается с множеством проблем. В отличие от функций, которые выполняются как команды, псевдонимы расширяются в текущую команду, что приводит к очень неожиданным проблемам при объединении этого псевдонима "команда" с другими командами. Они также не работают в скриптах.
Не работает ли это?
alias whatever='gnome-screensaver ; gnome-screensaver-command --lock'
Это приведет к выполнению двух команд один за другим:
alias lock='gnome-screensaver ; gnome-screensaver-command --lock'
Итак, используйте точку с запятой:
alias lock='gnome-screensaver; gnome-screen-saver-command --lock'
Это не работает, если вы хотите предоставить аргументы первой команде. Кроме того, создайте тривиальный script в каталоге $HOME/bin.
Я второй подход @mouviciel. Использование следующих команд довольно хорошо работает для простых команд:
alias doSomething='command1; command2'
Для команд, требующих аргументов, просто используйте функции:
doSomething() {
command1
command2 --lock
}
У меня возникла проблема при объявлении псевдонимов в ~/.bashrc
. Мой терминал не распознал псевдонимы, которые я указал в ~/.bashrc
. Я узнал из статьи (прилагается внизу), что Mac OS X запускает login-shell
по умолчанию, поэтому он вызывает ~/.bash_profile
вместо ~/.bashrc
.
Если вы сталкиваетесь с той же проблемой при объявлении своих псевдонимов, вы можете обратиться к следующей ссылке, чтобы решить проблему:
http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html