我制作了一个别名ff,并从~/.zsh/aliases.zsh获得了它。
别名本身运行良好:
alias ff
ff='firefox --safe-mode'而且按预期运行。
但是,当我尝试在gdb下运行它时,我得到:
> gdb ff
GNU gdb (Debian 7.12-6+b1) 7.12.0.20161007-git
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
...
For help, type "help".
Type "apropos word" to search for commands related to "word"...
ff: No such file or directory.
(gdb) quit我试过使用gdb firefox --safe-mode,但它无法运行。
有人能辨认出什么不对劲吗?
发布于 2018-02-08 00:11:21
别名是外壳的一个特征。定义别名将创建一个新的shell命令名。它只被shell识别,并且只有在它作为命令名出现时才被识别。
例如,如果您键入
> ff在shell提示符下,它将调用您的别名,但如果您键入
> echo ffff只是一个参数,而不是命令。(至少在bash中,如果别名定义以空格结尾,则可以使用一些技巧。如果您决定使用shell别名,请参阅Stéphane Chazelas的答复以获得可能的解决方案。)
你打字了
> gdb ff因此,shell调用gdb,将字符串ff作为参数传递给它。
您可以通过gdb命令行将参数传递给调试程序,但您必须使用--args选项。例如:
> gdb firefox --safe-mode尝试(并失败)将--safe-mode视为gdb的选项。要使用参数运行命令,可以手动执行:
> gdb firefox
...
(gdb) run --safe-mode或者,正如瑟格的回答提醒我的那样,您可以使用--args:
> gdb --args firefox --safe-mode
...
(gdb) run( --args之后的第一个参数是命令名;其余所有参数都传递给被调用的命令。)
可以从shell别名中提取参数,但我建议只定义一个单独的别名:
alias ff='firefox --safe-mode'
alias gdbff='gdb --args firefox --safe-mode'或者,更好的是使用shell函数,这些函数具有更多的功能。巴什手册上说:
对于几乎所有的用途,shell函数都比别名更好。
发布于 2018-02-08 11:38:26
在POSIX中,别名仅在命令位置(在任何需要命令的位置)或在别名之后展开,其扩展以空白字符结束(在zsh中,只有空格,在许多其他实现中,只有空格或制表符)。您还需要--args选项到gdb,以便能够将参数传递给正在调试的程序。所以你可以:
alias gdba='gdb --args ' # note the trailing space which does mean
# that aliases are to be expanded after it
alias ff='firefox --safe-mode'
gdba ffsuch还支持在更多地方扩展的全局别名(使用alias -g),但您可能不希望在这里为firefox --safe-mode使用这样的别名,因为您不希望echo ff输出ff以外的任何内容。
发布于 2018-02-08 11:31:02
您不需要别名来尝试获得gdb接受参数。
就你而言,这将是:
gdb firefox
(gdb) set args --safe-modehttps://unix.stackexchange.com/questions/422685
复制相似问题