Eh bien, cela est juste un commentaire, pas vraiment une réponse - je voulais juste d'inclure un code extraits. Je suis sur bash
/Ubuntu Lucid - et pour moi, j'ai eu à peu près les mêmes problèmes que dans: "GDB has problems with getting commands piped to STDIN - Unix Linux Forum - Fixunix.com".
Fondamentalement, je voudrais obtenir le même que dans l'extrait suivant:
$ gdb
GNU gdb (GDB) 7.1-ubuntu
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
(gdb) pwd
Working directory /media/work/dir.
(gdb)
... sauf, je voudrais « pipe » la commande pwd
en quelque sorte, et de garder gdb ouvert après (comme dans l'exemple ci-dessus).
J'ai essayé quelques-unes des suggestions ici, et la seule chose à travailler pour moi est la syntaxe (echo commands; cat) | gdb
- ainsi que (travail peu) Here Strings - voici mes résultats:
$ echo "pwd" | gdb
(gdb) Hangup detected on fd 0
error detected on stdin
$ echo "pwd" | gdb -x /dev/stdin
GNU gdb (GDB) 7.1-ubuntu
...
/dev/stdin: Invalid argument.
(gdb) Hangup detected on fd 0
error detected on stdin
$ gdb -x <(echo "pwd")
GNU gdb (GDB) 7.1-ubuntu
...
/dev/fd/63: No such file or directory.
(gdb) q
$ gdb -e "pwd"
GNU gdb (GDB) 7.1-ubuntu
...
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
(gdb) q # nothing happens
$ gdb <<<"pwd"
GNU gdb (GDB) 7.1-ubuntu
...
(gdb) Working directory /media/work/dir.
(gdb) quit # OK, but autoexits
$ gdb <<<"pwd
> "
GNU gdb (GDB) 7.1-ubuntu
...
(gdb) Working directory /media/work/dir.
(gdb) Working directory /media/work/dir.
(gdb) quit # with a line break at end, it execs twice, then exits
# the only one OK for my needs -
# except locks after quit, and needs Ctrl-C
$ (echo "pwd"; cat) | gdb
GNU gdb (GDB) 7.1-ubuntu
...
(gdb) Working directory /media/work/dir.
(gdb) q
^C
Eh bien, l'espoir cela aide quelqu'un,
À votre santé!
Edit: Maintenant, au moins, je sais pourquoi la substitution de processus ne fonctionne pas - il utilisera un descripteur de fichier temporaire, qui ne peut être reconnu comme un fichier par ls
(ainsi gdb
lire peut certainement pas, en outre, la référence disparaît presque immédiatement, à moins que le processus est en quelque sorte bloqué, comme cat
) - voir extrait de journal terminal:
$ echo -e "***\n" <(echo "pwd") "\n***\n`cat <(ls -C /dev/fd ; echo; for ix in /dev/fd/*; do irl=$(readlink -f $ix); echo $ix -\> $irl; ls -la $ix 2>&1; ls -la $irl 2>&1; echo '______'; done ; ls -C /dev/fd)`"
***
/dev/fd/63
***
0 1 2 3 63
/dev/fd/0 -> /dev/pts/0
lrwx------ 1 user user 64 2010-11-07 21:18 /dev/fd/0 -> /dev/pts/0
crw--w---- 1 user tty 136, 0 2010-11-07 21:18 /dev/pts/0
______
/dev/fd/1 -> /proc/10713/fd/pipe:[236191]
l-wx------ 1 user user 64 2010-11-07 21:18 /dev/fd/1 -> pipe:[236151]
ls: cannot access /proc/10713/fd/pipe:[236191]: No such file or directory
______
/dev/fd/2 -> /dev/pts/0
l-wx------ 1 user user 64 2010-11-07 21:18 /dev/fd/2 -> pipe:[236151]
crw--w---- 1 user tty 136, 0 2010-11-07 21:18 /dev/pts/0
______
/dev/fd/255 -> /proc/10721/fd/255
ls: cannot access /dev/fd/255: No such file or directory
ls: cannot access /proc/10721/fd/255: No such file or directory
______
/dev/fd/3 -> /proc/10725/fd/3
ls: cannot access /dev/fd/3: No such file or directory
ls: cannot access /proc/10725/fd/3: No such file or directory
______
0 1 2 3
en outre, les touches haut/bas ne fonctionnent pas avec (echo commands; cat) | gdb
, parce que c'est la façon dont le chat se comporte; si nous courons juste cat
donc il copie stdin stdout, nous obtenons:
$ cat # or `cat -`: and start pressing up/down keys - and get:
^[[A^[[B^[[A^[[B^[[A^[[B^C
Vous pouvez essayer d'activer le mode caractère brut (ou désactiver tampon/mode de cuisson) avec stty -cooked
, puis cat
sera à la fois écrire des caractères comme ^[[A
, et déplacer le curseur - malheureusement, dans ce mode, Ctrl-C ne fonctionne plus, donc vous ne serez pas en mesure de fermer cat
de cette façon ...
(echo "paramètres d'exécution", cat) | gdb X; # a travaillé un régal, merci beaucoup! –
Notez que vous perdez l'interactivité du shell si vous le faites (toutes les fonctions d'édition readline, l'historique, etc.). – ijw
Juste remarqué que haut/bas ne fonctionne pas .. pas une solution acceptable :( – Nils