Forum Programmation.autre Est-il possible de modifier les options d'une commande, une fois la commande passée ?

Posté par  . Licence CC By‑SA.
Étiquettes :
3
28
août
2022

Prenons l'exemple suivant :

En utilisant bash (debian étable),

:~$ jobs
[1]+ Stopped rsync -a /media/a/0152-ABF0/DCIM/Camera/20220* /media/a/srv_atilde/photo/dcim/Camera/2022/

peut-on ajouter l'option --verbose à la commande lancée, sans terminer la commande ?

afin d'obtenir ceci dans le résultat de #jobs
:~$ bg
[1]+ rsync -av /media/a/0152-ABF0/DCIM/Camera/20220* /media/a/srv_atilde/photo/dcim/Camera/2022/ &

rsync -v devient rsync -av

Est-il possible ensuite de rediriger &1 et &2 vers des logs ?

  • # Non

    Posté par  (Mastodon) . Évalué à 10. Dernière modification le 29 août 2022 à 10:14.

    Non, on ne peut pas changer la ligne de commande "à la volée". Cette ligne est lue par le programme en question (rsync dans ton exemple) en début d'exécution, et lui sert justement à décider quoi faire. Pour le --verbose ça ne changerait pas grand chose, mais imagine modifier pour mettre un autre répertoire ?

    Sinon pour rediriger tout dans un fichier logs, la syntaxe est cmd > fichier 2>&1

    Qui veut dire :
    - exécute cmd
    - redirige stdout vers fichier
    - redirige stderr sur le même endroit que stdout (donc fichier)

    Mais ce doit être fait au lancement de la commande (là c'est ton Bash qui est chargé de tout ça) et ça ne peut pas être modifié en cours d'exécution.

    En bref, quand tu lances un job long… réfléchis bien avant ! :)

    EDIT : Si, on peut faire de la redirection sur un process qui tourne

    En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

  • # "debian étable" ?

    Posté par  . Évalué à 4.

    Pardon, je peux pas m'empêcher !
    Ça me fait marrer et en même temps, en traduction littérale, il doit bien y avoir un site quelque part qui donne ça !

  • # tu peux rediriger &1 &2

    Posté par  (site web personnel) . Évalué à 4.

  • # Autre solution

    Posté par  (site web personnel, Mastodon) . Évalué à 5.

    Même s'il est impossible de modifier la ligne de commande, tu peux envoyer un signal pour demander à rsync d'émettre un rapport. Selon man rsync :

    Finally, you can get an instant progress report by sending rsync a signal of either SIGINFO or SIGVTALRM. On BSD systems, a SIGINFO is generated by typing a Ctrl+T (Linux doesn't currently support a SIGINFO signal). When the client-side process receives one of those signals, it sets a flag to output a single progress report which is output when the current file transfer finishes (so it may take a little time if a big file is being handled when the signal arrives). A filename is output (if needed) followed by the --info=progress2 format of progress info. If you don't know which of the 3 rsync processes is the client process, it's OK to signal all of them (since the non-client processes ignore the signal).

    Je n'ai jamais essayé cependant.

    Un gentil du net

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.