
Así que aquí he creado, o al menos he intentado crear, un alias para un comando que acepta un argumento de línea de comando, crea un nuevo directorio con ese nombre y va a él.
alias newfolder='mkdir $2 ; cd "$(history | tail -2 | awk '\''NR == 1'\'' | awk '\''{print $3}'\'')"'
El alias se creó correctamente, pero cuando quiero ejecutar el comando con un argumento de línea de comandos, aparece este mensaje de error.
username:~/workspace (master) $ newfolder a
mkdir: missing operand
Try 'mkdir --help' for more information.
bash: cd: newfolder='mkdir: No such file or directory
Respuesta1
Necesitas una función, no un alias. Intentar:
newfolder() { mkdir -p "$1" && cd "$1"; }
Ejemplo:
$ pwd
/tmp
$ newfolder dir1/dir2
$ pwd
/tmp/dir1/dir2
Notas:
La
-p
opciónmkdir
le indica que cree directorios principales faltantes si es necesario. En el ejemplo anterior,dir1
no existía peromkdir -p dir1/dir2
creó ambosdir1
ydir2
.Debido a que usamos el operador de shell
&&
, elcd
comando solo se ejecutará si elmkdir
comando se realizó correctamente.Los alias son útiles en casos muy simples en los que se puede sustituir una palabra por una cadena fija. Los alias no procesan argumentos.
Debido a que estamos usando una función de shell en lugar de un alias, podemos hacer referencia a los argumentos, como, en este caso,
$1
según nuestras necesidades.