Будьте осторожны, делая это.
Добавление здесь команды validate
создаст псевдоним mv
, скрывая команду mv
используемую для перемещения файлов. Вы можете столкнуться с другими конфликтами имен. Мое решение ниже обеспечивает некоторую защиту, но это не поможет, если вы определите псевдоним, а затем добавите исполняемый файл с тем же именем в ваш $PATH
. Если вы указали команду при ее запуске (например, "mv"
), это предотвратит расширение псевдонима и запустит фактическую команду, а не псевдоним.
На решение:
Вы можете обрезать его, зацикливая команды и просто имея одну команду псевдонима для каждой опции. Для добавления дополнительных наборов псевдонимов на лету мы можем поместить команды в функцию:
gen_aliases() {
local cmd="${1:?No command to create aliases for.}"
local c=${cmd:0:1}
which -s m${c} || alias m${c}="mvn $cmd"
which -s mc${c} || alias mc${c}="mvn clean $cmd"
which -s mc${c}o || alias mc${c}o="mvn clean $cmd --offline"
}
for cmd in compile test package install; do
gen_aliases "$cmd"
done
${parameter:?word}
- это расширение параметра, которое записывает word
в стандартную ошибку и выходит из функции или скрипта, если parameter
не установлен или имеет значение null. Дает нам некоторую проверку работоспособности, чтобы убедиться, что мы не создаем псевдонимы, если нам не дали команду сделать это.
${parameter:offset:length}
- это расширение параметра, которое расширяется до символов length
$parameter
начиная со offset
, поэтому ${cmd:0:1}
дает нам первый символ $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'