Bueno, esto es sólo un comentario, no es realmente una respuesta - sólo quería incluir algún código fragmentos. Estoy en bash
/Ubuntu Lucid - y para mí, tuve casi los mismos problemas que en: "GDB has problems with getting commands piped to STDIN - Unix Linux Forum - Fixunix.com".
Básicamente, me gustaría conseguir el mismo como en el siguiente fragmento:
$ 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)
... excepto, me gustaría "tubería" el comando pwd
alguna manera, y mantener abierta después GDB (como en el ejemplo anterior).
que he probado algunas de las sugerencias aquí, y lo único que trabaja para mí es la sintaxis (echo commands; cat) | gdb
-, así como (un poco de trabajo) Here Strings - aquí están mis resultados:
$ 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
Bueno, la esperanza esto ayuda a alguien,
¡Salud!
Editar: Ahora por lo menos sé qué substitución proceso no funcionará - se utilizará un descriptor de archivo temporal, que no puede ser reconocido como un archivo por ls
(tanto gdb
definitivamente no puede leerlo; además, el referencia desaparece casi inmediatamente, a menos que el proceso de alguna manera está bloqueado, al igual que con cat
) - ver el terminal fragmento de registro:
$ 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
Además, las teclas arriba/abajo no funcionan con (echo commands; cat) | gdb
, porque así es como se comporta el gato; si sólo corremos cat
por lo que las copias entrada estándar a la salida estándar, obtenemos:
$ cat # or `cat -`: and start pressing up/down keys - and get:
^[[A^[[B^[[A^[[B^[[A^[[B^C
Usted puede tratar de activar el modo de caracteres en bruto (o desactivar el modo de buffer/cocinado) con stty -cooked
, y luego cat
Marcarán los dos escriba caracteres como ^[[A
, y mueva el cursor - desafortunadamente, en este modo, Ctrl-C ya no funciona, por lo que no podrá cerrar cat
de esa manera ...
(echo "ejecutar params"; cat) | gdb X; # trabajado un regalo, muchas gracias! –
Tenga en cuenta que pierde la interactividad del shell si lo hace (todas las características de edición de lectura, historial, etc.). – ijw
Acabo de notar que subir/bajar no funciona ... no es una solución aceptable :( – Nils