Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

bash interactif

30 réponses
Avatar
Thomas
bonjour :-)


j'étais habitué à tcsh
parce que c'était le shell par défaut sous mac os x 10.1 et 10.2

je souhaite changer, parce que
- on m'a suffisamment dit que c'est un très mauvais shell (pour les
scripts, mais aussi en interactif, d'après ce que j'ai compris) pour que
je me décide
- depuis mac os x 10.3, ça m'oblige à aller dans le netinfo manager pour
changer le shell par défaut à chaque (ré)install (j'ai horreur de ça)

certains m'ont conseillé de passer à zsh,
mais je préférerais m'habituer à bash (puisque pour l'instant je ne
connais aucun des 2), sinon je serais tjr obligé de changer le shell par
défaut à chaque fois
tant pis si il y a des choses pour lesquelles il est moins confortable


pouvez vous m'aider un peu pour la transition, svp ? :-)



j'avais un fichier .tcshrc

j'ai essayé .bashrc --> rien

j'ai lu que l'équivalent est .profile
c'est bien ça ?


j'ai traduit
setenv PATH ~/bin:$PATH
en
PATH=~/bin:$PATH

c'est bon ?
ça a l'air, mais c'est bizarre, j'ai entendu dire qu'il fallait utiliser
la commande "export" à un moment donné (non ?)


dans .tcshrc, il y avait une ligne :
source /usr/share/tcsh/examples/rc

je crois que c'était pour améliorer le confort en mode interactif

est ce qu'il y a un équivalent ?


il y avait plein d'alias, et il y en a un que j'aimerais refaire sous
bash

mais
alias l 'ls -l'
ne marche pas

comment faut il l'écrire ?


pour l'autocompletion, tant pis pour les + de zsh, mais

est ce que bash sait simplement afficher la liste des possibilités,
comme le fait tcsh ?

(pour l'instant il veut bien compléter quand il y a juste une
possibilité, mais des qu'il y en a 2 il ne fait plus rien)

--
j'agis contre l'assistanat, je travaille dans une SCOP !

10 réponses

1 2 3
Avatar
Vincent Lefevre
Dans l'article ,
Stephane Chazelas écrit:

2007-09-10, 18:55(+00), Vincent Lefevre:
[...]
Il y a le classique:

if [ "$PS1" ]; then


Pas une bonne idee, $PS1 peut se trouver dans l'environnement.


Cf ma réponse à Cyrille.

Et la syntaxe est [ -n "$PS1" ]


C'est pareil, au moins pour les shells POSIX (comme bash):

http://www.opengroup.org/onlinepubs/009695399/utilities/test.html

1 argument:
Exit true (0) if $1 is not null; otherwise, exit false.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)


Avatar
Stephane Chazelas
2007-09-10, 23:37(+00), Vincent Lefevre:
[...]
Et la syntaxe est [ -n "$PS1" ]


C'est pareil, au moins pour les shells POSIX (comme bash):

http://www.opengroup.org/onlinepubs/009695399/utilities/test.html

1 argument:
Exit true (0) if $1 is not null; otherwise, exit false.


C'est vrai pour POSIX mais pas pour le /bin/sh de Solaris ;)
c'est moins explicite.

--
Stéphane


Avatar
Stephane Chazelas
2007-09-10, 23:34(+00), Vincent Lefevre:
[...]
case $- in
*i*)
mode interactif ;;
*)
mode batch
if [[ -t 0 ]]; then
lance par cron ou dans un pipe en entree
elif [[ -t 1 ]]; then
dans un pipe en sortie
fi
;;
esac

est plus fiable qq soit le shell utilise.


Ça doit fonctionner avec bash, mais pas quelque soit le shell utilisé:
ça ne semble pas être POSIX et n'est pas compatible avec le /bin/sh de
Solaris:
[...]


Dans ~/.bash_profile, l'argument portabilité ne concerne que la
portabilité vers les differentes versions de bash.

$- est POSIX, le "i" dedans je pense aussi (voir
http://www.opengroup.org/onlinepubs/009695399/utilities/sh.html)

Ce qui est sur, c'est que [[ ... ]] n'est pas POSIX.

--
Stéphane


Avatar
Nicolas George
Stephane Chazelas wrote in message
:
$- est POSIX, le "i" dedans je pense aussi (voir
http://www.opengroup.org/onlinepubs/009695399/utilities/sh.html)


Non, le i ne l'est pas. Dans ton lien, suis « Special Parameters », puis
« set ».

Avatar
Stephane Chazelas
2007-09-11, 07:33(+00), Nicolas George:
Stephane Chazelas wrote in message
:
$- est POSIX, le "i" dedans je pense aussi (voir
http://www.opengroup.org/onlinepubs/009695399/utilities/sh.html)


Non, le i ne l'est pas. Dans ton lien, suis « Special Parameters », puis
« set ».


Mais $- contient les options et -i est l'option pour avoir un
shell interactif. Elle n'est pas settable par set, mais l'est
par le shell, d'ou mon lien vers la page de sh qui documente -i.

-
(Hyphen.) Expands to the current option flags (the
single-letter option names concatenated into a
string) as specified on invocation, by the set
^^^^^^^^^^^^^
special built-in command, or implicitly by the
^^^^^^^^^^^^^^^^^^^^
shell.
^^^^^

Je ne pense pas qu'il y ait de doute a avoir.

Il n'y a pas un seul shell POSIX a ma connaissance (meme posh)
qui ne supporte pas ce "i".

--
Stéphane


Avatar
Nicolas George
Stephane Chazelas wrote in message
:
Elle n'est pas settable par set, mais l'est
par le shell


Ah oui, bien vu. Au temps pour moi.

Avatar
Vincent Lefevre
Dans l'article ,
Stephane Chazelas écrit:

Mais $- contient les options et -i est l'option pour avoir un
shell interactif. Elle n'est pas settable par set, mais l'est
par le shell, d'ou mon lien vers la page de sh qui documente -i.

-
(Hyphen.) Expands to the current option flags (the
single-letter option names concatenated into a
string) as specified on invocation, by the set
^^^^^^^^^^^^^
special built-in command, or implicitly by the
^^^^^^^^^^^^^^^^^^^^
shell.
^^^^^

Je ne pense pas qu'il y ait de doute a avoir.


Mais je pense qu'on peut très bien avoir un shell interactif
*sans option -i*. En effet,
http://www.opengroup.org/onlinepubs/009695399/utilities/sh.html
dit également:

If the -i option is present, or if there are no operands and the
shell's standard input and standard error are attached to a
terminal, the shell is considered to be interactive.

Cf le "or if ... terminal". Je pense que la plupart des shells POSIX
ajoutent l'option -i implicitement si le shell est interactif, mais
cela ne me semble pas obligatoire.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

Avatar
Vincent Lefevre
Dans l'article ,
Stephane Chazelas écrit:

2007-09-10, 23:37(+00), Vincent Lefevre:
[...]
Et la syntaxe est [ -n "$PS1" ]


C'est pareil, au moins pour les shells POSIX (comme bash):

http://www.opengroup.org/onlinepubs/009695399/utilities/test.html

1 argument:
Exit true (0) if $1 is not null; otherwise, exit false.


C'est vrai pour POSIX mais pas pour le /bin/sh de Solaris ;)


Oui, mais je citais seulement mon .bashrc (en fait, j'avais repris ça
du bashrc par défaut) et je n'ai pas dit que c'était valable partout.

c'est moins explicite.


Oui.

Maintenant, j'aurais tendance à ne pas trop utiliser [ ... ] sous bash
et zsh, car cette forme est buggée:

:~$ /usr/bin/[ ( ! -e ) ] && echo foo
:~$ [ ( ! -e ) ] && echo foo
bash: [: `)' expected, found ]

On ne devrait pas avoir de message d'erreur, car POSIX dit dans
le cas à 4 arguments: "If $1 is '(' and $4 is ')', perform the
two-argument test of $2 and $3." et dans le cas à 2 arguments:
"If $1 is '!', exit true if $2 is null, false if $2 is not null."
donc c'est parfaitement valide.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)



Avatar
Stephane Chazelas
2007-09-11, 08:02(+00), Vincent Lefevre:
[...]
(Hyphen.) Expands to the current option flags (the
single-letter option names concatenated into a
string) as specified on invocation, by the set
^^^^^^^^^^^^^
special built-in command, or implicitly by the
^^^^^^^^^^^^^^^^^^^^
shell.
^^^^^

Je ne pense pas qu'il y ait de doute a avoir.


Mais je pense qu'on peut très bien avoir un shell interactif
*sans option -i*. En effet,
http://www.opengroup.org/onlinepubs/009695399/utilities/sh.html
dit également:

If the -i option is present, or if there are no operands and the
shell's standard input and standard error are attached to a
terminal, the shell is considered to be interactive.

Cf le "or if ... terminal". Je pense que la plupart des shells POSIX
ajoutent l'option -i implicitement si le shell est interactif, mais
cela ne me semble pas obligatoire.
[...]


Si, ca n'a pas de raison d'etre different des autres options.
Pour les shells interactifs par defaut, ca veut dire que
l'option i est on par defaut, c'est couvert par le "or
implicitly by the shell" et c'est pareil par exemple pour
l'option m (monitor).

--
Stéphane


Avatar
Vincent Lefevre
Dans l'article ,
Stephane Chazelas écrit:

2007-09-11, 08:02(+00), Vincent Lefevre:
[...]
Mais je pense qu'on peut très bien avoir un shell interactif
*sans option -i*. En effet,
http://www.opengroup.org/onlinepubs/009695399/utilities/sh.html
dit également:

If the -i option is present, or if there are no operands and the
shell's standard input and standard error are attached to a
terminal, the shell is considered to be interactive.

Cf le "or if ... terminal". Je pense que la plupart des shells POSIX
ajoutent l'option -i implicitement si le shell est interactif, mais
cela ne me semble pas obligatoire.
[...]


Si, ca n'a pas de raison d'etre different des autres options.
Pour les shells interactifs par defaut, ca veut dire que
l'option i est on par defaut,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^


C'est sur ce point que je ne suis pas d'accord. Quand on dit
"if", c'est une implication, pas une équivalence (il peut y avoir
équivalence, mais ce n'est pas obligatoire). Maintenant, c'est
probablement mal dit.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)


1 2 3