Bashの単語がエイリアス、関数、ファイルなどを参照するように強制する方法は?

Bashの単語がエイリアス、関数、ファイルなどを参照するように強制する方法は?

関連コンテンツに詳細を追加しようとすると質問、私は利用可能なBashの単語のタイプのどれを実行するか指定する方法がわからないことに気づきました。help type単語の種類に応じて5つの種類があります。

  • ニックネーム
  • キーワード
  • 機能
  • 組み込み
  • 文書

単語にはいくつかの種類があります(trueこれは単なる例であり、より一般的に含まれる単語は次のとおりですcd)。

$ type -a true
true is a shell builtin
true is /bin/true

特定の同義語を適用するには?これまでは好みの順で次のようになります。

  • エイリアス:これは他のすべての同義語よりも優先順位が高いため、特別な場合です。これを実行することは、エイリアスが定義されておらず、コマンドが失敗した場合にのみ役立ちます。

    $ 
    
  • キーワード:

    $ 
    
  • 機能:

    $ 
    
  • 内蔵:

    $ builtin true
    
  • 文書:

    $ command true
    $ $(which true)
    $ /bin/true
    

部分的な解決策:

  • 引用符にはエイリアスとキーワードは含まれません。それは、

    $ 'true'
    

    関数、組み込み関数、またはファイルのみが実行されます。

ベストアンサー1

質問された内容は実際には意味がありません。

キーワードシェル構文の一部であることを意味する単語です。これはトークン化によって識別されます。これを引用すると、シェルはそれを認識しなくなります。

ただし、ほとんどのシェルではキーワードにエイリアスを指定できます。したがって、エイリアスはキーワードよりも優先されます(実際には早く拡張され、後でより多くのトークン化が行われ、より多くのエイリアス、キーワードを持つことができます)...

エイリアス(コマンド位置でのみ拡張されるzshによって定義されたエイリアスを除くalias -g)なので、通常はbuiltin the-alias

関数は、外部コマンドよりも優先される組み込みコマンドよりも優先します(次に$PATH使用するコマンドを決定します)。

以下を使用して組み込みを強制できます。

builtin the-cmd and its args

(ただし、標準命令ではないことに注意してください。)

エイリアスを引用して無効にすることができます(一部のシェルでは、引用されたバージョンをエイリアスとして使用することもできます)。

たとえば(ここではzsh構文)。

'while'() echo function while
alias 'while=echo alias while'

while true実際に出力を書き込むと、エイリアスとキーワードの両方が無効になるため、キーワードは使用できませんalias while truewhile

whileたとえば、次のように関数を呼び出すことができます。

'whi'le whatever

組み込み関数がある場合while(もちろんwhileキーワードを持つシェルには含まれていない)、次のように書くことができます。

builtin while whatever

コマンドを呼び出すにはwhile

env while whatever

またはzshshシミュレーションでない場合):

command while whatever 

(他のシェルでは、組み込み機能ではなくcommand機能のみブロックされます。)

または

/full/path/to/while whatever

もちろん、次のような愚かなことをするのを防ぐ方法はありません。

alias 'while=while "w"hile; do'
"while"() { while "whi"le; done; }

少なくともzshではこれはうまくいきます(しかし愚かです)。

おすすめ記事