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.