Aliases são um recurso do shell. Definir um alias cria um novo nome de comando do shell. É reconhecido apenas pelo shell e somente quando aparece como um nome de comando.
Por exemplo, se você digitar
> ff
em um prompt de shell, ele invocará seu alias, mas se você digitar
> echo ff
o ff
é apenas um argumento, não um comando. (Pelo menos no bash, você pode jogar alguns truques se a definição do alias terminar com um espaço. Veja a resposta de Stéphane Chazelas para uma possível solução se você estiver determinado a usar aliases de shell.)
Você digitou
> gdb ff
para que o shell invoque gdb
, passando a string ff
como argumento.
Você pode passar argumentos para o programa depurado através da linha de comando gdb
, mas você tem que usar a opção --args
. Por exemplo:
> gdb firefox --safe-mode
tenta (e falha) tratar --safe-mode
como uma opção para gdb
. Para executar o comando com um argumento, você pode fazer isso manualmente:
> gdb firefox
...
(gdb) run --safe-mode
ou, como a resposta do thrig me lembra, você pode usar --args
:
> gdb --args firefox --safe-mode
...
(gdb) run
(O primeiro argumento após --args
é o nome do comando; todos os argumentos restantes são passados para o comando chamado.)
É possível extrair os argumentos de um alias do shell, mas eu recomendo apenas definir um alias separado:
alias ff='firefox --safe-mode'
alias gdbff='gdb --args firefox --safe-mode'
Ou melhor, use as funções do shell, que são muito mais versáteis. O manual do bash diz:
For almost every purpose, shell functions are preferred over aliases.