Comment savoir dans un script si on est exécuté dans un shell
interactif ? (Et plus particulièrement bash) Je suppose qu'il y
a une variable qui l'indique mais je ne la trouve pas.
Ma rustine consiste à appeler 'tty' mais c'est un peu lourd et
peut-être pas très fiable. (Il retourne "not a tty" ou
N'est pas un « tty » dans un shell non interactif en fct de LC_LANG).
Bref c'est pas très propre tout ça.
Comment savoir dans un script si on est exécuté dans un shell interactif ? (Et plus particulièrement bash) Je suppose qu'il y a une variable qui l'indique mais je ne la trouve pas.
Ma rustine consiste à appeler 'tty' mais c'est un peu lourd et peut-être pas très fiable. (Il retourne "not a tty" ou N'est pas un « tty » dans un shell non interactif en fct de LC_LANG). Bref c'est pas très propre tout ça.
Pour savoir si un file descriptor correspond a un terminal, test -t.
J'aimerais savoir ce que tu entends par "on est exécuté dans un shell interactif". Est-ce que ton script est execute (auquel cas le shell qui l'execute n'est pas un shell interactif) ou source.
Si c'est le premier cas, est-ce que quelque chose execute via un autre programme (:! dans vi par exemple) est "exécuté dans un shell interactif", est-ce que quelque chose execute avec tous les fd standard redirige l'est?
A+
-- Jean-Marc Site de usenet-fr: http://www.usenet-fr.news.eu.org
Fabrice Mendes <mendes@dea1.labri.fr> writes:
Comment savoir dans un script si on est exécuté dans un shell
interactif ? (Et plus particulièrement bash) Je suppose qu'il y
a une variable qui l'indique mais je ne la trouve pas.
Ma rustine consiste à appeler 'tty' mais c'est un peu lourd et
peut-être pas très fiable. (Il retourne "not a tty" ou
N'est pas un « tty » dans un shell non interactif en fct de LC_LANG).
Bref c'est pas très propre tout ça.
Pour savoir si un file descriptor correspond a un terminal, test -t.
J'aimerais savoir ce que tu entends par "on est exécuté dans un shell
interactif". Est-ce que ton script est execute (auquel cas le shell
qui l'execute n'est pas un shell interactif) ou source.
Si c'est le premier cas, est-ce que quelque chose execute via un autre
programme (:! dans vi par exemple) est "exécuté dans un shell
interactif", est-ce que quelque chose execute avec tous les fd
standard redirige l'est?
A+
--
Jean-Marc
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Comment savoir dans un script si on est exécuté dans un shell interactif ? (Et plus particulièrement bash) Je suppose qu'il y a une variable qui l'indique mais je ne la trouve pas.
Ma rustine consiste à appeler 'tty' mais c'est un peu lourd et peut-être pas très fiable. (Il retourne "not a tty" ou N'est pas un « tty » dans un shell non interactif en fct de LC_LANG). Bref c'est pas très propre tout ça.
Pour savoir si un file descriptor correspond a un terminal, test -t.
J'aimerais savoir ce que tu entends par "on est exécuté dans un shell interactif". Est-ce que ton script est execute (auquel cas le shell qui l'execute n'est pas un shell interactif) ou source.
Si c'est le premier cas, est-ce que quelque chose execute via un autre programme (:! dans vi par exemple) est "exécuté dans un shell interactif", est-ce que quelque chose execute avec tous les fd standard redirige l'est?
A+
-- Jean-Marc Site de usenet-fr: http://www.usenet-fr.news.eu.org
Stephane Chazelas
2003/10/31, 13:50(+01), Fabrice Mendes:
Comment savoir dans un script si on est exécuté dans un shell interactif ? (Et plus particulièrement bash) Je suppose qu'il y a une variable qui l'indique mais je ne la trouve pas.
Il y a $- qui contient une indication de si un shell est interactif mais ce n'est pas ça qu'il te faut, un script est toujours interprêté par un shell non-intéractif, meme s'il a été lancé par un shell intéractif, ça n'a rien à voir.
Ce que tu veux savoir, c'est si l'entrée standard est un tty.
Ma rustine consiste à appeler 'tty' mais c'est un peu lourd et peut-être pas très fiable. (Il retourne "not a tty" ou N'est pas un « tty » dans un shell non interactif en fct de LC_LANG). Bref c'est pas très propre tout ça.
Comment savoir dans un script si on est exécuté dans un shell
interactif ? (Et plus particulièrement bash) Je suppose qu'il y
a une variable qui l'indique mais je ne la trouve pas.
Il y a $- qui contient une indication de si un shell est
interactif mais ce n'est pas ça qu'il te faut, un script est
toujours interprêté par un shell non-intéractif, meme s'il a été
lancé par un shell intéractif, ça n'a rien à voir.
Ce que tu veux savoir, c'est si l'entrée standard est un tty.
Ma rustine consiste à appeler 'tty' mais c'est un peu lourd et
peut-être pas très fiable. (Il retourne "not a tty" ou
N'est pas un « tty » dans un shell non interactif en fct de LC_LANG).
Bref c'est pas très propre tout ça.
Comment savoir dans un script si on est exécuté dans un shell interactif ? (Et plus particulièrement bash) Je suppose qu'il y a une variable qui l'indique mais je ne la trouve pas.
Il y a $- qui contient une indication de si un shell est interactif mais ce n'est pas ça qu'il te faut, un script est toujours interprêté par un shell non-intéractif, meme s'il a été lancé par un shell intéractif, ça n'a rien à voir.
Ce que tu veux savoir, c'est si l'entrée standard est un tty.
Ma rustine consiste à appeler 'tty' mais c'est un peu lourd et peut-être pas très fiable. (Il retourne "not a tty" ou N'est pas un « tty » dans un shell non interactif en fct de LC_LANG). Bref c'est pas très propre tout ça.
Merci pour test -t c'est exactement ce qu'il me faut ! J'ai un .bashrc un peu (trop) customisé (tuné avec des jantes alu) et lorsque j'utilise scp (ssh) la commande par en vrac après la connexion avec l'hôte (qui héberge mon .bashrc).
Merci FM.
Merci pour test -t c'est exactement ce qu'il me faut !
J'ai un .bashrc un peu (trop) customisé (tuné avec des jantes alu)
et lorsque j'utilise scp (ssh) la commande par en vrac après la
connexion avec l'hôte (qui héberge mon .bashrc).
Merci pour test -t c'est exactement ce qu'il me faut ! J'ai un .bashrc un peu (trop) customisé (tuné avec des jantes alu) et lorsque j'utilise scp (ssh) la commande par en vrac après la connexion avec l'hôte (qui héberge mon .bashrc).
Merci FM.
Pascal Bourguignon
Fabrice Mendes writes:
Comment savoir dans un script si on est exécuté dans un shell interactif ? (Et plus particulièrement bash) Je suppose qu'il y a une variable qui l'indique mais je ne la trouve pas.
Ma rustine consiste à appeler 'tty' mais c'est un peu lourd et peut-être pas très fiable. (Il retourne "not a tty" ou N'est pas un « tty » dans un shell non interactif en fct de LC_LANG). Bref c'est pas très propre tout ça.
FM
Franchement, tu exagère!
man bash
An interactive shell is one started without non-option arguments and without the -c option whose standard input and output are both connected to terminals (as determined by isatty(3)), or one started with the -i option. PS1 is set and $- includes i if bash is interactive, allowing a shell script or a startup file to test this state.
case "$-" in *i*) interactive=1 ;; *) interactive=0 ;; esac
Comment savoir dans un script si on est exécuté dans un shell
interactif ? (Et plus particulièrement bash) Je suppose qu'il y
a une variable qui l'indique mais je ne la trouve pas.
Ma rustine consiste à appeler 'tty' mais c'est un peu lourd et
peut-être pas très fiable. (Il retourne "not a tty" ou
N'est pas un « tty » dans un shell non interactif en fct de LC_LANG).
Bref c'est pas très propre tout ça.
FM
Franchement, tu exagère!
man bash
An interactive shell is one started without non-option arguments
and without the -c option whose standard input and output are
both connected to terminals (as determined by isatty(3)), or one
started with the -i option. PS1 is set and $- includes i if bash
is interactive, allowing a shell script or a startup file to test
this state.
case "$-" in
*i*) interactive=1 ;;
*) interactive=0 ;;
esac
Comment savoir dans un script si on est exécuté dans un shell interactif ? (Et plus particulièrement bash) Je suppose qu'il y a une variable qui l'indique mais je ne la trouve pas.
Ma rustine consiste à appeler 'tty' mais c'est un peu lourd et peut-être pas très fiable. (Il retourne "not a tty" ou N'est pas un « tty » dans un shell non interactif en fct de LC_LANG). Bref c'est pas très propre tout ça.
FM
Franchement, tu exagère!
man bash
An interactive shell is one started without non-option arguments and without the -c option whose standard input and output are both connected to terminals (as determined by isatty(3)), or one started with the -i option. PS1 is set and $- includes i if bash is interactive, allowing a shell script or a startup file to test this state.
case "$-" in *i*) interactive=1 ;; *) interactive=0 ;; esac
Merci pour test -t c'est exactement ce qu'il me faut ! J'ai un .bashrc un peu (trop) customisé (tuné avec des jantes alu) et lorsque j'utilise scp (ssh) la commande par en vrac après la connexion avec l'hôte (qui héberge mon .bashrc).
En principe, le .bashrc n'est lu que par les shells interactifs, un shell n'est pas intéractif quand l'entree standard n'est pas un terminal (sauf si tu passes l'option -i, mais je ne vois pas trop pourquoi bash serait lancé avec l'option -i). Donc, un test de [ -t 0 ] dans un .bashrc est toujours censé renvoyer "vrai".
Ah, j'y suis, tu as un:
. ~/.bashrc dans to ~/.bash_profile, c'est ça?
Et ssh invoque un shell de login pour que les variables d'environnement que tu utilises d'habitude dans tes sessions soient positionnées.
C'est vrai que bash a une gestion de ses fichiers de démarrage complètement incohérente.
Dans le ~/.bash_profile, tu devrais mettre :
[[ "$-" = *i* && -f ~/.bashrc && -r ~/.bashrc ]] && . ~/.bashrc au lieu de . ~/.bashrc tout court ou utiliser un autre shell.
En principe, le ~/.bashrc, c'est le fichier de customisation du shell, de son utilisation en mode interactif.
Merci pour test -t c'est exactement ce qu'il me faut !
J'ai un .bashrc un peu (trop) customisé (tuné avec des jantes alu)
et lorsque j'utilise scp (ssh) la commande par en vrac après la
connexion avec l'hôte (qui héberge mon .bashrc).
En principe, le .bashrc n'est lu que par les shells interactifs,
un shell n'est pas intéractif quand l'entree standard n'est pas
un terminal (sauf si tu passes l'option -i, mais je ne vois pas
trop pourquoi bash serait lancé avec l'option -i). Donc, un test
de [ -t 0 ] dans un .bashrc est toujours censé renvoyer "vrai".
Ah, j'y suis, tu as un:
. ~/.bashrc
dans to ~/.bash_profile, c'est ça?
Et ssh invoque un shell de login pour que les variables
d'environnement que tu utilises d'habitude dans tes sessions
soient positionnées.
C'est vrai que bash a une gestion de ses fichiers de démarrage
complètement incohérente.
Dans le ~/.bash_profile, tu devrais mettre :
[[ "$-" = *i* && -f ~/.bashrc && -r ~/.bashrc ]] && . ~/.bashrc
au lieu de
. ~/.bashrc
tout court ou utiliser un autre shell.
En principe, le ~/.bashrc, c'est le fichier de customisation du
shell, de son utilisation en mode interactif.
Merci pour test -t c'est exactement ce qu'il me faut ! J'ai un .bashrc un peu (trop) customisé (tuné avec des jantes alu) et lorsque j'utilise scp (ssh) la commande par en vrac après la connexion avec l'hôte (qui héberge mon .bashrc).
En principe, le .bashrc n'est lu que par les shells interactifs, un shell n'est pas intéractif quand l'entree standard n'est pas un terminal (sauf si tu passes l'option -i, mais je ne vois pas trop pourquoi bash serait lancé avec l'option -i). Donc, un test de [ -t 0 ] dans un .bashrc est toujours censé renvoyer "vrai".
Ah, j'y suis, tu as un:
. ~/.bashrc dans to ~/.bash_profile, c'est ça?
Et ssh invoque un shell de login pour que les variables d'environnement que tu utilises d'habitude dans tes sessions soient positionnées.
C'est vrai que bash a une gestion de ses fichiers de démarrage complètement incohérente.
Dans le ~/.bash_profile, tu devrais mettre :
[[ "$-" = *i* && -f ~/.bashrc && -r ~/.bashrc ]] && . ~/.bashrc au lieu de . ~/.bashrc tout court ou utiliser un autre shell.
En principe, le ~/.bashrc, c'est le fichier de customisation du shell, de son utilisation en mode interactif.
Fabrice Mendes writes: [...] savoir quand un shell est "interactif"
Franchement, tu exagère! man bash
Mea culpa. J'ai oublié les bases, je me suis rué sur la doc info aux sections bash features...
$- est expliqué comme suit : `-' (A hyphen.) Expands to the current option flags as specified upon invocation, by the `set' builtin command, or those set by the shell itself (such as the `-i' option).
Et pour trouver ta citation j'ai du me faire violence dans le man. Mais si j'avais commencé par le début je ne passerais pas pour un couillon.
Fabrice Mendes <mendes@dea1.labri.fr> writes:
[...] savoir quand un shell est "interactif"
Franchement, tu exagère!
man bash
Mea culpa. J'ai oublié les bases, je me suis rué sur la doc info aux
sections bash features...
$- est expliqué comme suit :
`-'
(A hyphen.) Expands to the current option flags as specified upon
invocation, by the `set' builtin command, or those set by the
shell itself (such as the `-i' option).
Et pour trouver ta citation j'ai du me faire violence dans le man.
Mais si j'avais commencé par le début je ne passerais pas pour un couillon.
Fabrice Mendes writes: [...] savoir quand un shell est "interactif"
Franchement, tu exagère! man bash
Mea culpa. J'ai oublié les bases, je me suis rué sur la doc info aux sections bash features...
$- est expliqué comme suit : `-' (A hyphen.) Expands to the current option flags as specified upon invocation, by the `set' builtin command, or those set by the shell itself (such as the `-i' option).
Et pour trouver ta citation j'ai du me faire violence dans le man. Mais si j'avais commencé par le début je ne passerais pas pour un couillon.
Cordialement, FM
Fabrice Mendes
Stephane Chazelas writes:
[...]
Ah, j'y suis, tu as un:
. ~/.bashrc dans to ~/.bash_profile, c'est ça?
Exact.
Dans le ~/.bash_profile, tu devrais mettre : [[ "$-" = *i* && -f ~/.bashrc && -r ~/.bashrc ]] && . ~/.bashrc
Il est clair que ce n'est pas très cohérent.., (Euh le -f est implicitement fait par le -r)
tout court ou utiliser un autre shell.
C'est un peu expéditif... après tant d'années de bons et loyaux services... Et pis c'est le seul dont je sois sur qu'il est installé partout ici. (oui oui c'est une excuse un peu faible).
Dans le ~/.bash_profile, tu devrais mettre :
[[ "$-" = *i* && -f ~/.bashrc && -r ~/.bashrc ]] && . ~/.bashrc
Il est clair que ce n'est pas très cohérent..,
(Euh le -f est implicitement fait par le -r)
tout court ou utiliser un autre shell.
C'est un peu expéditif... après tant d'années de bons et loyaux services...
Et pis c'est le seul dont je sois sur qu'il est installé partout ici. (oui oui
c'est une excuse un peu faible).
Dans le ~/.bash_profile, tu devrais mettre : [[ "$-" = *i* && -f ~/.bashrc && -r ~/.bashrc ]] && . ~/.bashrc
Il est clair que ce n'est pas très cohérent.., (Euh le -f est implicitement fait par le -r)
tout court ou utiliser un autre shell.
C'est un peu expéditif... après tant d'années de bons et loyaux services... Et pis c'est le seul dont je sois sur qu'il est installé partout ici. (oui oui c'est une excuse un peu faible).
Fabrice Mendes writes: [...] savoir quand un shell est "interactif"
Franchement, tu exagère! man bash
Mea culpa. J'ai oublié les bases, je me suis rué sur la doc info aux sections bash features...
$- est expliqué comme suit : `-' (A hyphen.) Expands to the current option flags as specified upon invocation, by the `set' builtin command, or those set by the shell itself (such as the `-i' option).
Et pour trouver ta citation j'ai du me faire violence dans le man. Mais si j'avais commencé par le début je ne passerais pas pour un couillon.
Oui, c'est là qu'on voit l'avantage d'utiliser emacs pour lire les pages man: on peut trés facilement faire des recherches et sauter n'importe où.
Sinon, si on ne veut pas utiliser emacs, c'est plus compliqué, mais on peut encore faire:
man bash | col -b > /tmp/bash.man ; $VISUAL /tmp/bash.man
pour utiliser son éditeur préféré, mais c'est quand même plus facile de taper:
Fabrice Mendes <mendes@dea1.labri.fr> writes:
[...] savoir quand un shell est "interactif"
Franchement, tu exagère!
man bash
Mea culpa. J'ai oublié les bases, je me suis rué sur la doc info aux
sections bash features...
$- est expliqué comme suit :
`-'
(A hyphen.) Expands to the current option flags as specified upon
invocation, by the `set' builtin command, or those set by the
shell itself (such as the `-i' option).
Et pour trouver ta citation j'ai du me faire violence dans le man.
Mais si j'avais commencé par le début je ne passerais pas pour un couillon.
Oui, c'est là qu'on voit l'avantage d'utiliser emacs pour lire les
pages man: on peut trés facilement faire des recherches et sauter
n'importe où.
Sinon, si on ne veut pas utiliser emacs, c'est plus compliqué, mais on
peut encore faire:
man bash | col -b > /tmp/bash.man ; $VISUAL /tmp/bash.man
pour utiliser son éditeur préféré, mais c'est quand même plus facile de taper:
Fabrice Mendes writes: [...] savoir quand un shell est "interactif"
Franchement, tu exagère! man bash
Mea culpa. J'ai oublié les bases, je me suis rué sur la doc info aux sections bash features...
$- est expliqué comme suit : `-' (A hyphen.) Expands to the current option flags as specified upon invocation, by the `set' builtin command, or those set by the shell itself (such as the `-i' option).
Et pour trouver ta citation j'ai du me faire violence dans le man. Mais si j'avais commencé par le début je ne passerais pas pour un couillon.
Oui, c'est là qu'on voit l'avantage d'utiliser emacs pour lire les pages man: on peut trés facilement faire des recherches et sauter n'importe où.
Sinon, si on ne veut pas utiliser emacs, c'est plus compliqué, mais on peut encore faire:
man bash | col -b > /tmp/bash.man ; $VISUAL /tmp/bash.man
pour utiliser son éditeur préféré, mais c'est quand même plus facile de taper: