gdbがエイリアスが好きではない理由[重複]

gdbがエイリアスが好きではない理由[重複]

エイリアスを作成し、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実行されません。

誰でも問題が何であるかを理解できますか?

ベストアンサー1

エイリアスはシェルの機能です。エイリアスを定義すると、新しいシェルコマンド名が生成されます。これはシェルでのみ認識され、コマンド名で表示される場合にのみ認識されます。

たとえば、次のように入力すると

> ff

シェルプロンプトでエイリアスを呼び出しますが、次のように入力すると

> echo ff

これはffコマンドではなくパラメータにすぎません。 (少なくともbashでは、エイリアス定義が空白で終わる場合は、いくつかのトリックを使用できます。Stefan Chazerasの答えシェルエイリアスを使用することにした場合は、考えられる回避策をご覧ください。 )

あなたは入力

> gdb ff

したがって、シェルは文字列を引数として渡してgdb呼び出されます。ff

コマンドラインを介してデバッグしているプログラムに引数を渡すことはできますが、gdbこのオプションを使用する必要があります--args。たとえば、

> gdb firefox --safe-mode

引数を使用してコマンドを実行するには、手動--safe-modegdb実行できます。

> gdb firefox
...
(gdb) run --safe-mode

または、次のようにトリガーの答え以下が利用可能であることを思い出してください--args

> gdb --args firefox --safe-mode
...
(gdb) run

(次の最初の引数--argsはコマンド名です。残りの引数はすべて呼び出されたコマンドに渡されます。)

シェルエイリアスからパラメータを抽出することは可能ですが、別々のエイリアスを定義することをお勧めします。

alias ff='firefox --safe-mode'
alias gdbff='gdb --args firefox --safe-mode'

あるいは、より多様な機能を提供するシェル機能を使用する方がよいでしょう。 Bashのマニュアルは次のように言います:

ほとんどすべての目的で、シェル関数はエイリアスより優れています。

おすすめ記事