Wie verwende ich ' im Alias?

Wie verwende ich ' im Alias?

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.

verwandte Informationen