Sto leggendo "BASH guida tascabile di Oreilly". Ha detto:
L'ID processo del processo Bash corrente. In alcuni casi, questo può differire da $$.
Sopra la spiegazione, ha spiegato la $BASHPID
variabile.
Domanda: quali casi?
Sto leggendo "BASH guida tascabile di Oreilly". Ha detto:
L'ID processo del processo Bash corrente. In alcuni casi, questo può differire da $$.
Sopra la spiegazione, ha spiegato la $BASHPID
variabile.
Domanda: quali casi?
Risposte:
Un esempio è fornito nella BASHPID
descrizione della manpage di bash:
BASHPID
Expands to the process id of the current bash process. This
differs from $$ under certain circumstances, such as subshells
that do not require bash to be re-initialized.
Ecco un esempio di una subshell che mostra il contenuto della variabile, insieme a $$
e il contenuto BASHPID
esterno della subshell.
$ echo $(echo $BASHPID $$) $$ $BASHPID
25680 16920 16920 16920
# | | | |
# | | | -- $BASHPID outside of the subshell
# | | -- $$ outside of the subshell
# | -- $$ inside of the subshell
# -- $BASHPID inside of the subshell
Subshell. $$
è specificato da POSIX e rimane sempre il valore del processo shell originale. $BASHPID
è una variabile specifica di Bash, ed è sempre il valore del processo da cui la variabile viene referenziata, contando i subshell.
$ f() { printf '%s: %d, %d\n' "$1" $$ $BASHPID; };
$ ${BASH_VERSION+shopt -s lastpipe}; set +m;
$ f 1 >&2 | f 2
2: 31490, 31490
1: 31490, 32545
Sono riuscito a convincere il manutentore di mksh ad aggiungerlo BASHPID
alla versione più recente, quindi è in qualche modo portatile. È anche possibile implementare BASHPID
te stesso in ksh93 su molte piattaforme.
$BASHPID
è una novità di BASH 4. Se si utilizza BASH 3.x, è necessario utilizzare$$