Bash: effetto dell'esecuzione di `set -i`?


2

Oggi stavo leggendo attraverso la documentazione di set, quando mi sono reso conto che le mie bandiere variabili ( $-) conteneva una bandiera non documentato nella pagina di aiuto ( help set) e sul GNU.org : i.
Dopo qualche tempo sono riuscito a trovare questa pagina che afferma che ista per interattivo .
La prima cosa che ho provato, ovviamente, è stata spegnerlo.
Dopo l'esecuzione set +i, $-non conteneva più un i, ma a parte ciò, apparentemente tutto funzionava ancora come sempre.
Allo stesso modo, l'inserimento set -idi un file di script non ha avuto effetti evidenti durante l'esecuzione.

Quindi, la mia domanda: mettere set -i/ set +iin uno script o eseguirlo sulla riga di comando ha effettivamente effetti diversi dalla modifica della $-variabile?

Risposte:


5

Apparentemente, l'unica conseguenza dell'uso set -io set +isulla riga di comando dopo l'inizializzazione della shell è la modifica del valore di $-. L' -iopzione può essere utilizzata in modo significativo solo quando si richiama bashper creare una shell, nel qual caso forzerà la shell a essere interattiva.

Un rapido esame della fonte bash mostra che i controlli interattivi durante l'esecuzione si riferiscono alla variabile globale interactive, che viene impostata durante la sequenza di inizializzazione e quindi non modificata. Solo set [+-]ie $-usa il forced_interactiveglobale. ( interactivesarà impostato su true se forced_interactiveè impostato o altrimenti come descritto in man bash.)


0

bash-1.14.7-14 ha una documentazione per l'opzione -i nella pagina man. https://bugzilla.redhat.com/show_bug.cgi?id=1129

   -i        If the -i option is present, the shell is interactive.

Una shell interattiva legge i comandi dall'input dell'utente su un tty. Tra le altre cose, tale shell legge i file di avvio all'attivazione, visualizza un prompt e abilita il controllo dei processi per impostazione predefinita. L'utente può interagire con la shell. Una shell che esegue uno script è sempre una shell non interattiva.

Ulteriori informazioni qui:

http://www.tldp.org/LDP/abs/html/intandnonint.html https://unix.stackexchange.com/questions/43385/what-do-you-mean-by-interactive-shell

Aggiunta: più collegamenti

Una risposta davvero valida sulle shell senza login

https://askubuntu.com/questions/247738/why-is-etc-profile-not-invoked-for-non-login-shells

Il manuale bash su shell interattive

http://www.gnu.org/software/bash/manual/html_node/Interactive-Shell-Behavior.html#Interactive-Shell-Behavior


Lo capisco, ma se una shell è interattiva o no dipende solo da come è stata avviata, giusto? Quindi, l'esecuzione set +isulla riga di comando (quando la shell è già in esecuzione) fa effettivamente qualcosa, a parte la modifica $-?
Siguza,

Lo stato interattivo viene influenzato solo durante l'inizializzazione della shell, quindi modificarlo dalla riga di comando non farà nulla per il resto della sessione.
Alex Atkinson,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.