Bash : une ligne pour rediriger l'entrée et la sortie vers un fichier

Bonjour, bonsoir.
Il y a 20 que j’ai posé le problème à mon administrateur.
J’ai oublié depuis.
Je cherche une commande pour rediriger l’entrée (les commandes) et la sortie (les résultats des commande) vers un fichier.
Je sais que c’est une commande contenant un script, un ou 2 pipe et un tee.

Merci pour celui qui connais la question et la réponse.
Bravo à ceux qui vont chercher et peut-être trouver.

Genre ça ?

ma_commande_shell | tee -a mon_fichier_de_log
1 J'aime

Ou sinon, pour enregistrer tout ce qu’affiche ton shell, tu peux utiliser script

Je crois qu’elle s’appelle godzilla mais je ne sais plus dans quel paquet.

Merci beaucoup pour ce lien.

Merci beaucoup pour ce lien.

Là, j’aurais pas la commande en question

Si tu remplace ma_commande_shell par ta commande pour lancer le script avec tes commandes ça ne marche pas ?

et le 2>&1 ?

J’ai indiqué les élément constituant de la ligne de commande à trouver.

Une redirection ne suffit pas.

Salut à tous,

Tamie, je ne sais pas si tu as résolu ton problème, en attendant, sauf si je n’ai pas bien saisi la demande, voici une proposition de ma part.
Faire appel à read en attribuant l’entrée saisie à une variable (ent):

#!bin/bash

echo 'Saisir la commande:'
read ent
echo
echo "L'entrée est : $ent"
echo "La sortie est : "
$ent
exit

Je ne sais pas si mon script est très académique* (n’hésitez à me le dire, voir à le corriger) mais il semble fonctionner.

*: Si je m’interroge c’est pour ça:
Si je fais dans un terminal un

> read a

puis, je saisi par exemple ls -la (une commande qui comporte des espaces),
alors

> $a

me renvoie dans les cordes alors que le script lui fonctionne.

Éclairez moi sious-plait.

Ok, non, ça répondra pas parce que c’est pas un script que je cherche.

C’est une ligne de commande dont j’ai donné les élément et effctivement il y a une redirection dans la ligne de commande.

Ok, il va sans dire qu’il faut compléter le script avec des redirections face aux informations que l’on veut récupérer, comme ceci par exemple (j’imagine que c’est ce que tu veux faire, les insérer dans une doc):

 #!/bin/bash

echo 'Saisir la commande:'
read ent
echo
echo "La commande : $ent" >> memo.txt
echo "donne : " >> memo.txt
$ent >> memo.txt
echo >> memo.txt

exit

Ceci dit, si tu retrouves cette commande, ça m’intéresse. On voit ici la difficulté de récupérer l’entrée. J’étais moi aussi tenté d’utiliser tee, mais je ne vois pas comment (la solution proposée par Clochette ne récupère que la sortie dans le fichier).

J’ai cherché une solution à ton problème essentiellement et , sans succès.
Le man de bash donné par PmGs en français c’est sympa aussi (ça ne remplace évidement pas la version originale).

Edit: pour ceux et celles qui aurait vu mon message avant correction, j’ai juste viré quelques considérations personnelles dont on se fout royalement :). Si ce n’est que mon expertise dans le domaine n’est pas assuré, ça c’est important.

C’est ce que j’ai trouvé de mieux :
bash -c "script -q /dev/null" | tee log.txt

le fichier log.txt est vide. « script » c’est un script ou la commande donnée par Sputnik93?

C’est moi qui est donné la commande.
Effectivement script est un utilitaire GNU

Bah non c’est Sputnik93 qui à donné la commande :wink:

Du coup j’ai un peu de mal à comprendre, faut-il oui ou non faire appel à un script (voir ton premier message)?

Si oui, ma commande finalement est plus simple (mode « gros malin ») :wink: :

./LeScriptDeTfc.sh

note: mon script peut aussi être écrit sous forme d’une seule commande avec des && et &… :wink:

C’est étonnant quand même qu’il n’y est pas une réponse simple et rapide pour récupérer cette entrée.

oui, premier message 5me ligne.
Merci pour vos recherches.

Verifiez !

lord@Tamie:~$ cat > log.txt 
lord@Tamie:~$ bash -c "script -q /dev/null" | tee log.txt
lord@Tamie:~$ echo Hello World!
Hello World!
lord@Tamie:~$ exit
lord@Tamie:~$ cat log.txt 
lord@Tamie:~$ echo Hello World!
Hello World!
lord@Tamie:~$ exit
lord@Tamie:~$

Petite aparté, si mon tutoiement te gène, n’hésite pas à me le dire.

J’ai vérifié, mais ( n’oublie pas mon coté « débutant »), en lançant bêtement (c’est pas bien je sais) ta commande suivit d’un cat log.txt.
Maintenant, en suivant la procédure que tu me donne à savoir:

bash -c "script -q /dev/null" | tee log.txt

puis
echo toto
puis
exit
puis

cat log.txt

Aie!! ça part en live! Le terminal m’envoie une suite de prompt, puis des lignes vide sans s’arrêter de mouliner, que seul un ctrl C stop.
Je ne sais pas si ça à une importance, mais je lance ça sous zsh.

Edit: mais si ça à une importance quel con, désolé Tamie, je t’ai fait pendre ton temps.

Bonjour,

Essayer screen.

  • Installation

    $ sudo apt install screen

  • Utilisation

    $ screen

  • Logger toute l’activité dans un fichier ~/screenlog.0

    [CTRL]+[a] suivi de [H]

  • Fermer la session screen

    $ exit

  • Aide

A+