Bonjour,
J’ai écris ceci pour détecter si mon script est utilisé dans un terminal ou via un pipe.
#!/bin/bash
echo -n "STDIN: "; [ -t 0 ] && echo TERM || echo PIPE
echo -n "STDOUT:: "; [ -t 1 ] && echo TERM || echo PIPE
echo -n "STDERR: "; [ -t 2 ] && echo TERM || echo PIPE
Utilisation en local :
$ ./term.sh
STDIN: TERM
STDOUT:: TERM
STDERR: TERM
$ echo toto | ./term.sh
STDIN: PIPE
STDOUT:: TERM
STDERR: TERM
$ ./term.sh | grep STD
STDIN: TERM
STDOUT:: PIPE
STDERR: TERM
$
Via ssh :
$ ssh localhost ./term.sh
login@localhost password:
##################
# BASHRC running #
##################
STDIN: PIPE
STDOUT:: PIPE
STDERR: PIPE
$ ssh -t localhost ./term.sh
login@localhost password:
##################
# BASHRC running #
##################
STDIN: TERM
STDOUT:: TERM
STDERR: TERM
Connection to localhost closed.
$ echo toto | ssh -t localhost ./term.sh
login@localhost password:
##################
# BASHRC running #
##################
STDIN: PIPE
STDOUT:: PIPE
STDERR: PIPE
$
Donc question, comment dire à ssh de laisser les terminaux comme il les trouve ?
J’ai cherché du côté de tput, mais je n’ai rien trouvé de valable :'(
Question subsidiaire, comment empêcher l’exécution du bash(rc|_login) ?
# un bout de reponse
Posté par NeoX . Évalué à 2.
pour la question de pipe/term je ne sais pas mais
je penses qu'il suffirait, si l'utilisateur ne fait que de l'accès distant (via ssh)
de forcer son shell à être ton script.
en tant que foot sur la machine serveur,
chsh user /usr/local/bin/monscript.sh
ainsi quand l'utilisateur se connecte, il lance forcement monscript.sh
sans lancer bash si le script ne le lances pas.
y a peut-être aussi des options au serveur SSH pour faire des trucs plus complexes
# pour le bash sans conf :
Posté par sputnick (site web personnel, Mastodon) . Évalué à 2.
Salut,
On ne peut pas mettre d'array dans le string...
# D'autres essais
Posté par Frédéric Heulin . Évalué à 2.
Dans le cas qui te pose souci, j'ai un message en plus.
Et dans ce cas là, on peut faire :
ou alors
mais j'ai peur qu'aucun des deux ne te soit utile !
En clair, ssh laisse les terminaux comme il les trouvent.
Le truc, c'est qu'il doit en créer (-t) un tty si tu lui demandes ou pas (-T ou rien) de l'autre côté du tunnel ssh.
Dans le second cas, il redirige tout pour te ressortir les entrées/sorties de ce côté du tunnel. Dans le premier, il alloue un terminal dont il redirige les I/O et exécute ton programme dedans.
[^] # Re: D'autres essais
Posté par Anthony Jaguenaud . Évalué à 1.
Tiens, c’est rigolo, dans ton premier exemple, je n’ai pas la phrase :
« Pseudo-terminal will not be allocated because stdin is not a terminal. »
Je n’ai pas le choix de la version ssh. Mais ça explique sans doute nos différences.
Sinon, je voulais juste que ssh simule sur le serveur distant le même type de terminal qu’il a lui, mais avec une granularité de chacune des sorties, pas globalement.
Je n’ai rien trouvé sur le net. Me demande si je vais pas posé la question sur la ML de openssh.
[^] # Re: D'autres essais
Posté par Frédéric Heulin . Évalué à 1.
Au cas où :
[^] # Pareil ICI pour les tests du premier post
Posté par NeoX . Évalué à 2.
en local sur le serveur
à distance :
Client : OpenSSH_5.6p1, OpenSSL 0.9.8r 8 Feb 2011 (OSX)
Serveur : OpenSSH_5.3p1 Debian-3ubuntu7, OpenSSL 0.9.8k 25 Mar 2009 (Ubuntu 10.04)
en ssh depuis ma machine vers mon serveur :
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.