
Итак, я создал или, по крайней мере, попытался создать псевдоним для команды, которая принимает аргумент командной строки, создает новый каталог с этим именем и переходит в него.
alias newfolder='mkdir $2 ; cd "$(history | tail -2 | awk '\''NR == 1'\'' | awk '\''{print $3}'\'')"'
Псевдоним создан успешно, но когда я хочу запустить команду с аргументом командной строки, я получаю это сообщение об ошибке.
username:~/workspace (master) $ newfolder a
mkdir: missing operand
Try 'mkdir --help' for more information.
bash: cd: newfolder='mkdir: No such file or directory
решение1
Вам нужна функция, а не псевдоним. Попробуйте:
newfolder() { mkdir -p "$1" && cd "$1"; }
Пример:
$ pwd
/tmp
$ newfolder dir1/dir2
$ pwd
/tmp/dir1/dir2
Примечания:
Параметр
-p
tomkdir
сообщает ему о необходимости создания отсутствующих родительских каталогов. В приведенном выше примереdir1
не существовало, ноmkdir -p dir1/dir2
были созданыdir1
иdir2
.Поскольку мы используем оператор оболочки
&&
,cd
команда будет выполнена только в случаеmkdir
ее успешного выполнения.Псевдонимы полезны в очень простых случаях, когда фиксированная строка может быть заменена словом. Псевдонимы не обрабатывают аргументы.
Поскольку мы используем функцию оболочки вместо псевдонима, мы можем ссылаться на аргументы, например, в данном случае,
$1
, в соответствии с нашими потребностями.