
Also habe ich hier einen Alias für einen Befehl erstellt oder zumindest versucht, einen zu erstellen, der ein Befehlszeilenargument akzeptiert, ein neues Verzeichnis mit diesem Namen erstellt und dorthin geht.
alias newfolder='mkdir $2 ; cd "$(history | tail -2 | awk '\''NR == 1'\'' | awk '\''{print $3}'\'')"'
Der Alias wurde erfolgreich erstellt, aber wenn ich den Befehl mit einem Befehlszeilenargument ausführen möchte, erhalte ich diese Fehlermeldung.
username:~/workspace (master) $ newfolder a
mkdir: missing operand
Try 'mkdir --help' for more information.
bash: cd: newfolder='mkdir: No such file or directory
Antwort1
Sie benötigen eine Funktion, keinen Alias. Versuchen Sie:
newfolder() { mkdir -p "$1" && cd "$1"; }
Beispiel:
$ pwd
/tmp
$ newfolder dir1/dir2
$ pwd
/tmp/dir1/dir2
Anmerkungen:
Die
-p
Option bismkdir
weist das Programm an, fehlende übergeordnete Verzeichnisse bei Bedarf zu erstellen. Im obigen Beispieldir1
existierte nicht, aber sowohl alsmkdir -p dir1/dir2
auch wurden erstellt .dir1
dir2
Da wir den Shell-Operator verwenden
&&
,cd
wird der Befehl nur ausgeführt, wenn ermkdir
erfolgreich war.Aliase sind in sehr einfachen Fällen nützlich, in denen ein Wort durch eine feste Zeichenfolge ersetzt werden kann. Aliase verarbeiten keine Argumente.
Da wir anstelle eines Alias eine Shell-Funktion verwenden, können wir
$1
je nach Bedarf auf die Argumente verweisen, wie in diesem Fall beispielsweise .