Eh bien, c'est juste un commentaire, pas vraiment une réponse, juste voulu inclure certains des extraits de code. Je suis sur bash
/Ubuntu Lucid - et pour moi, j'ai eu à peu près les mêmes problèmes que dans: "GDB a des problèmes avec l'obtention de commandes canalisée vers STDIN - Unix Linux, Forum - Fixunix.com".
En gros, j'aimerais atteindre le même comme 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 que, je voudrais "pipe" l' pwd
commande en quelque sorte, et de garder gdb ouvrir par la suite (comme dans l'exemple ci-dessus).
J'ai essayé quelques suggestions ici, et la seule chose à travailler pour moi, c'est l' (echo commands; cat) | gdb
de la syntaxe ainsi que (un peu) Ici Chaînes - 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, espérons que cela aide quelqu'un,
Cheers!
Edit: Maintenant, je sais au moins pourquoi le processus de substitution ne fonctionne pas - il va utiliser un fichier temporaire descripteur, qui ne peut être reconnu comme un fichier en ls
(donc gdb
certainement ne peut pas le lire; en outre, la référence disparaît presque immédiatement, à moins que le processus est en quelque sorte bloqué, comme avec cat
) - voir le terminal extrait de journal:
$ 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
Aussi, les touches haut/bas ne parviennent pas à travailler avec des (echo commands; cat) | gdb
, parce que c'est la façon dont le chat se comporte; si on se contente de courir cat
donc il copie stdin vers la sortie standard, on obtient:
$ cat # or `cat -`: and start pressing up/down keys - and get:
^[[A^[[B^[[A^[[B^[[A^[[B^C
Vous pouvez essayer de tourner sur raw en mode caractère (ou désactiver le tampon/cuit mode) avec stty -cooked
, puis cat
permettra à la fois d'écrire des caractères comme ^[[A
, et déplacer le curseur - malheureusement, dans ce mode, les touches Ctrl-C ne fonctionne plus, donc vous ne serez pas en mesure de fermer cat
de cette façon...