エイリアスを作成し、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-mode
でgdb
実行できます。
> 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のマニュアルは次のように言います:
ほとんどすべての目的で、シェル関数はエイリアスより優れています。