Bash Frage

  • ich möchte aus dem Mail Queue bestimmte Mails mit bestimmten Mailadressen löschen.


    Code
    postqueue -p | tail -n +2 | awk 'BEGIN { RS = "" } /mail@domain\.com/ { print $1 }' | tr -d '*!' | postsuper -d -


    Das funktioniert problemlos. Wie muss ich das aber umsetzen, wenn ich eine Variable nutzen möchte?


    Bash
    #!/bin/bash
    
    MAILADDRESS="mail@domain\.com"
    
    postqueue -p | tail -n +2 | awk 'BEGIN { RS = "" } "/$MAILADDRESS/" { print $1 }' | tr -d '*!' | postsuper -d -


    So funktioniert es nicht. Wo liegt mein Fehler?

  • Shellvariablen in awk zu verwenden ist tricky.

    Versuche es mal auf diese Weise:

    Code
    awk -v var="$MAILADDRESS" 'awkbefehl, nun mit var'

    ...

    In deinem Fall musst du dann die slashes evtl. in die Zuweisung der Variablen packen:

    Code
    var="/$MAILADDRESS/"

    Einfach mal damit rumprobieren. ;)

  • du meinst es sicher so



    Bash
    #!/bin/bash
    
    MAILADDRESS="mail@domain.com"
    
    postqueue -p | tail -n +2 | awk -v VAR="/$MAILADDRESS/" 'BEGIN { RS = "" } "VAR" { print $1 }' | tr -d '*!' | postsuper -d -


    es werden immer noch alle Mails gelöscht.

  • Da musst du halt mal rumprobieren, wie es in diesem Fall dann konkret aussehen muss. (Die Anführungszeichen um VAR müssen wahrscheinlich weg) Das Grundprinzip stimmt jedenfalls. (Nimm doch einfach mal echo, statt postsuper -d).