Sie können auch die Methode Here Document EOF verwenden, um das mehrzeilige Skript spontan zu erstellen. Der Hauptvorteil davon ist, dass Sie doppelte Anführungszeichen ohne Escapezeichen verwenden können es:
timeout 1s bash <<EOF
sleep 2s
echo "something without escaping double quotes"
EOF
Hinweise:
- Der EOF-Abschluss darf nicht auf Leerzeichen/Tabulatoren folgen, sondern am Anfang der letzten Zeile stehen.
- Stellen Sie sicher, dass Sie lokale Funktionen mit
export -f my_func
exportiert haben oderset -o allexport
für alle Funktionen (bevor sie deklariert werden). Dies ist relevant für vorherige Antworten seit dem Aufruf von bash/sh wird der Prozess auch in einer neuen Sitzung ausgeführt, ohne sich der lokalen Umgebungsfunktionen bewusst zu sein.
timeout
ist kein Shell-Dienstprogramm und führt keine Verarbeitung im Shell-Stil durch. Es muss ein einziger Befehl zur Ausführung gegeben werden. Dieser Befehl kann jedoch eine beliebige Anzahl von Argumenten haben. Glücklicherweise ist einer der Befehle, die Sie ihm geben können, bash
:
timeout 1 bash -c '{ sleep 2; echo something; }'
In dieser Form sind die geschweiften Klammern jetzt natürlich überflüssig:
timeout 1 bash -c 'sleep 2; echo something'
Hier bash
ist der Befehl, der timeout
führt aus. -c
und sleep 2; echo something
sind Argumente für diesen Befehl.