Puoi anche utilizzare il metodo Here Document EOF per creare lo script multilinea al volo. Il vantaggio principale è che puoi usare le virgolette doppie senza escape it:
timeout 1s bash <<EOF
sleep 2s
echo "something without escaping double quotes"
EOF
Note:
- La chiusura EOF non deve seguire spazi/tabulazioni, ma essere all'inizio dell'ultima riga.
- Assicurati di aver esportato le funzioni locali con
export -f my_func
oset -o allexport
per tutte le funzioni (prima di dichiararle). Questo è rilevante per le risposte precedenti inoltre, poiché chiamando bash/sh esegue il processo in una nuova sessione, ignaro delle funzioni dell'ambiente locale.
timeout
non è un'utilità di shell e non esegue l'elaborazione in stile shell. Deve essere dato un singolo comando da eseguire. Quel comando, tuttavia, può avere qualsiasi numero di argomenti. Fortunatamente, uno dei comandi che puoi dargli è bash
:
timeout 1 bash -c '{ sleep 2; echo something; }'
Naturalmente, in questa forma, le parentesi graffe sono ora superflue:
timeout 1 bash -c 'sleep 2; echo something'
Qui, bash
è il comando che timeout
esegue. -c
e sleep 2; echo something
sono argomento di quel comando.