Ich habe eine Zeile, die ich mit einem Alias aufrufen möchte.
while printf '%s ' "$(df -P / | awk 'NR==2 { print $(NF-1) }')"; do sleep 30; done
Ich habe versucht zu entkommen '
, \'
aber es hat nicht funktioniert.
Was ist die korrekte Syntax für die Verwendung des obigen Einzeilers im Alias?
Antwort1
alias my_du=$'while printf \'%s \' "$(df -P / | awk \'NR==2 { print $(NF-1) }\')"; do sleep 3; done'
Sie können das Ergebnis überprüfen mit
alias my_du
Wenn statt oder $()
mit „in Anführungszeichen“ gesetzt wird, wird es ersetzt und das Ergebnis statt des beabsichtigten Programmaufrufs wird Teil der Aliasdefinition."
'
\
Antwort2
Obwohl dies in einen Alias umgewandelt werden kann, werden im Allgemeinen Funktionen bevorzugt. Von man bash
:
Für fast alle Zwecke werden Aliase durch Shell-Funktionen ersetzt.
Ihr Alias in Funktionsform:
my_du() {
while printf '%s ' "$(df -P / | awk 'NR==2 { print $(NF-1) }')"
do
sleep 30
done
}
Das ist besser lesbar und somit wartungsfreundlicher.
Antwort3
Sie können einfache Anführungszeichen nicht maskieren, während sie sich noch in einfachen Anführungszeichen befinden, da \
dies im Kontext einfacher Anführungszeichen wörtlich genommen wird. Schließen Sie die einfachen Anführungszeichen vor dem Maskieren oder verwenden Sie besser doppelte Anführungszeichen.
alias my_du="while printf '%s ' \"\$(df -P / | awk 'NR==2 { print \$(NF-1) }')\"; do sleep 30; done"
Antwort4
Wenn Sie Befehle verwenden möchten, die Argumente annehmen oder in irgendeiner Weise mit ihrer Umgebung interagieren, verwenden Sie Funktionen. Zumindest in Bash werden Aliase erweitert, wenn sie definiert werden.könntetun so, als ob sie Argumente annehmen oder Variablen verwenden würden. Manchmal. Murphys Gesetz stellt sicher, dass das nicht funktioniert, wenn es wirklich nötig ist.