エイリアスはシェルの機能です。エイリアスを定義すると、新しいシェル コマンド名が作成されます。シェルによってのみ認識され、コマンド名として表示される場合にのみ認識されます。
たとえば、
> ff
シェル プロンプトでエイリアスを呼び出しますが、次のように入力すると
> echo ff
02
コマンドではなく単なる引数です。 (少なくとも bash では、エイリアス定義がスペースで終わる場合、いくつかのトリックを実行できます。シェル エイリアスを使用することに決めた場合は、考えられる解決策について Stéphane Chazelas の回答を参照してください。)
入力しました
> gdb ff
そのため、シェルは 17
を呼び出しました 、文字列 21
を渡します
34
を介して、デバッグされたプログラムに引数を渡すことができます コマンドラインですが、 47
を使用する必要があります オプション。例:
> gdb firefox --safe-mode
53
を処理しようとします (そして失敗します) 66
のオプションとして .引数を指定してコマンドを実行するには、手動で行うことができます:
> gdb firefox
...
(gdb) run --safe-mode
または、スリグの答えが私に思い出させるように、 74
を使用できます :
> gdb --args firefox --safe-mode
...
(gdb) run
(84
に続く最初の引数 コマンド名です。残りのすべての引数は、呼び出されたコマンドに渡されます。)
シェル エイリアスから引数を抽出することは可能ですが、別のエイリアスを定義することをお勧めします:
alias ff='firefox --safe-mode'
alias gdbff='gdb --args firefox --safe-mode'
または、はるかに汎用性の高いシェル関数を使用することをお勧めします。 bash のマニュアルには次のように書かれています:
<ブロック引用>ほとんどすべての目的で、シェル関数はエイリアスよりも優先されます。
直接ではありませんが、ZSH シェル エイリアスを 99
に適した形式にまとめることで可能です。 .
alias testtest='echo test test test'
function gdb-alias() {
local cmdargs
cmdargs=( ${(z)${aliases[$1]}} )
gdb -q --args $cmdargs
}
これにより、エイリアスが分割されます (より堅牢なコードでは、最初の引数が実際にエイリアスであるか、設定されているかなどを確認します)。ZSH はそれらの引数を 107
にフィードします。 便利な 117
経由 フラグ (125
を参照) )。 139
を実行すると
% gdb-alias testtest
Reading symbols from echo...(no debugging symbols found)...done.
(gdb) r
Starting program: /Users/jhqdoe/usr/Darwin15.6.0-x86_64/bin/echo test test test
test test test
[Inferior 1 (process 93721) exited normally]
(gdb)
148
であることを示しています (153
の私のアセンブリ実装 、とにかく) 167
によって実行されました エイリアスからの引数で。
(これはおそらく、グローバル エイリアス、またはシェル メタ文字 foo を含むエイリアスで壊れる可能性があります。これは、gdb が ZSH で設定されている可能性のあるものと互換性のあるシェルを介してこれらの引数をスローするかどうかによって異なりますが、単純な 172<では問題ありません。 /コード> タイプのもの。たぶん。)
POSIX シェルでは、エイリアスはコマンド位置 (コマンドが期待される場所) または展開が空白文字で終了するエイリアスの後 (183
) でのみ展開されます。 、スペースのみ、他の多くの実装ではスペースまたはタブのみ)¹。 192
も必要です 204
へのオプション デバッグ中のプログラムに引数を渡すことができます。できること:
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 ff
¹ zsh はグローバルもサポートします エイリアス (215
を使用) ) より多くの場所に展開されますが、おそらく 228
にそのようなエイリアスを使用したくないでしょう。 ここでは 232
を望まないので たとえば、242
以外のものを出力するには .