Будьте осторожны, делая это.
Добавление здесь validate
команды создаст mv
псевдоним, скрывая mv
команду, используемую для перемещения файлов. Вы можете столкнуться с другими конфликтами имен. Мое решение ниже обеспечивает некоторую защиту, но это не поможет, если вы определите псевдоним, а затем добавите исполняемый файл с тем же именем к своему $PATH
потом. Если вы указываете команду при ее запуске (например "mv"
), это предотвратит расширение псевдонима и запустит фактическую команду, а не псевдоним.
На решение:
Вы можете обрезать его, зацикливая команды и просто имея одну команду псевдонима для каждой опции. Для добавления дополнительных наборов псевдонимов на лету мы можем поместить команды в функцию:
gen_aliases() { local cmd="$" local c=$ which -s m$ || alias m$="mvn $cmd" which -s mc$ || alias mc$="mvn clean $cmd" which -s mc$o || alias mc$o="mvn clean $cmd --offline" } for cmd in compile test package install; do gen_aliases "$cmd" done
$
является расширением параметра, которое записывает word
в стандартную ошибку и выходит из функции или сценария, если parameter
не установлено или равно нулю. Дает нам некоторую проверку работоспособности, чтобы убедиться, что мы не создаем псевдонимы, если нам не дали команду сделать это.
$
это расширение параметра, которое расширяется до length
символов, $parameter
начинающихся с offset
, поэтому $
дает нам первый символ $cmd
.
which word
проверяет, word
существует ли где-нибудь в $PATH
. В -s
Молчание это, так что мы просто получить значение выхода ( 0
если он найден, 1
если не найден), который затем мы используем с ||
для выполнения alias
команд, только если which
ничего не найти word
в $PATH
.
Проверка результатов:
$ type mc mc is aliased to `mvn compile' $ type mcpo mcpo is aliased to `mvn clean package --offline'
И добавив еще один набор псевдонимов:
$ gen_aliases validate $ type mv mv is /bin/mv $ type mcv mcv is aliased to `mvn clean validate'