Ну, это всего лишь комментарий, а не ответ - просто хотелось включить некоторые фрагменты кода. Я на bash
/ Ubuntu Lucid - и у меня были почти те же проблемы, что и в: " У GDB проблемы с передачей команд в STDIN - Unix Linux Forum - Fixunix.com " .
По сути, я хотел бы добиться того же, что и в следующем фрагменте:
$ 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)
... за исключением того, что я хотел бы как-то "передать" команду pwd
и впоследствии оставить gdb открытым (как в примере выше).
Я попробовал некоторые из предложений здесь, и единственное, что работает для меня, это синтаксис (echo commands; cat) | gdb
- а также (несколько работающий) Здесь строки - вот мои результаты:
$ 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
Ну, надеюсь, это кому-нибудь поможет,
Ура!
Изменить: Теперь, по крайней мере, я знаю, почему подстановка процесса не будет работать - он будет использовать временный дескриптор файла, который не может быть распознан как файл ls
(, поэтому gdb
определенно не может его прочитать; кроме того, ссылка почти мгновенно исчезает, если процесс каким-то образом не заблокирован, как в случае cat
) - см. фрагмент журнала терминала:
$ 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
Кроме того, клавиши вверх / вниз не работают с (echo commands; cat) | gdb
, потому что именно так ведет себя кошка; если мы просто запустим cat
, чтобы он скопировал стандартный ввод в стандартный вывод, мы получим:
$ cat # or `cat -`: and start pressing up/down keys - and get:
^[[A^[[B^[[A^[[B^[[A^[[B^C
Вы можете попытаться включить режим необработанных символов ( или отключить режим с буферизацией / режим приготовления ) с помощью stty -cooked
, а затем cat
запишет символы как ^[[A
и переместит курсор - к сожалению, в этом режиме Ctrl-C больше не работает, поэтому вы не сможете закрыть cat
таким образом ...