Cóż, to tylko komentarz, naprawdę nie odpowiedź - po prostu chciałem to trochę kodu snippets. Jestem na bash
/Ubuntu Lucid - i dla mnie miałem takie same problemy jak w: "GDB has problems with getting commands piped to STDIN - Unix Linux Forum - Fixunix.com".
Zasadniczo chciałbym osiągnąć takie same, jak w poniższym przykładzie:
$ 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)
... z wyjątkiem, chciałbym komenda „rura” pwd
jakoś, a potem trzymać otwarte gdb (jak w powyższym przykładzie).
Próbowałem niektóre z propozycji tutaj, a jedyną rzeczą, pracuje dla mnie jest składnia (echo commands; cat) | gdb
- a także (nieco roboczy) Here Strings - oto moje wyniki:
$ 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
Cóż, nadzieja to pomaga komuś,
Pozdrawiam!
Edit: Teraz przynajmniej wiem, dlaczego podstawienie proces nie zadziała - będzie korzystał tymczasowy deskryptor pliku, który nie może być uznany jako plik przez ls
(zatem gdb
pewno nie można go odczytać; dodatkowo, odniesienie znika niemal natychmiast, chyba że proces jest w jakiś sposób zablokowany, ponieważ z cat
) - zobacz terminala fragment dziennika:
$ 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
także góra/dół klucze nie działają z (echo commands; cat) | gdb
, bo to jest jak kot zachowuje; jeśli po prostu uruchomić cat
więc kopiuje stdin stdout, otrzymujemy:
$ cat # or `cat -`: and start pressing up/down keys - and get:
^[[A^[[B^[[A^[[B^[[A^[[B^C
Możesz spróbować włączyć tryb postaci surowej (lub wyłączyć buforowany/tryb gotowane) z stty -cooked
, a następnie cat
będzie zarówno napisz znaki jako ^[[A
i przesuń kursor - niestety, w tym trybie Ctrl-C już nie działa, więc nie będzie można zamknąć w ten sposób cat
...
(echo "uruchom params"; cat) | gdb X; # pracował uczta, wielkie dzięki! –
Pamiętaj, że jeśli to zrobisz, stracisz interaktywność powłoki (wszystkie funkcje edycji, historii itp.). – ijw
Po prostu zauważyłem, że góra/dół nie działa. Nie jest to dopuszczalne rozwiązanie :( – Nils