背景
しかし、zsh ドキュメント(6.2章)では、次のように説明します。辞書コマンド修飾子-
実行できますが、すべてのタイプ(、、、、builtin
およびcommand
)exec
の例を提供するわけではありません。nocorrect
noglob
一つあるエマルジョンユーザーの問い合わせファンクアン。ただし、この質問は、すべての種類の辞書コマンド修飾子に対する要求の例を強調するわけではありません。
質問
各辞書コマンド修飾子が実行できる操作の例を提供できる人はいますか?
乾杯!
答え1
以下に、各修飾子の例を示します。などの一部は、ここに示されている用途に加えて、exec
さまざまな用途に使用されます。command
実行に使用されるユーティリティは、
-
0番目の引数(コマンド名)の最初の文字としてダッシュを挿入します。コマンド名の最初の文字であるダッシュは、ログインシェルで初期化する必要があることをシェルに通知する一般的な方法です。# Start the yash shell as a login shell: - yash
これにより、シェルが別の起動スクリプトセットを読み始めることができます。たとえば、ファイルを最初に
yash
読み込み~/.yash_profile
、そうでなければ読みません。-
シェルがの最初の文字で始まると、$0
ログインシェルになります。ログインシェルには通常l
(小文字のell)もあります$-
(bash
シェルはこの規則に従わないようです)。$ sh -c 'echo "$0"; echo "$-"' sh ch
$ - sh -c 'echo "$0"; echo "$-"' -sh clh
使用
builtin
:builtin cd mydir
cd
たとえば、機能の一部として作業ディレクトリを実際に変更するために呼び出される組み込みバリアントであるシェル関数を作成したい場合にcd
便利です。ただ使用すると、cd
関数への再帰呼び出しが発生します。$ cd () { builtin cd "$@" && printf 'Now in %s\n' $PWD; } $ cd /tmp Now in /tmp
コマンド
command
は標準 POSIX コマンドたとえば、ユーザーの現在のシステムに特定のユーティリティが存在することを確認するために使用できますPATH
。if ! command -v gsed >/dev/null 2>&1; then echo 'gsed is not available' fi
この
command
コマンドは、上記と同様の方法で特定のユーティリティのエイリアスと関数の検索を無効にするためにも一般的に使用されますbuiltin
。キーワード
exec
はまた、標準、完全に使用できます変える現在のシェルと他のプロセス:# Replace the shell with bash exec bash
その後、入力はシェルセッションに置き換えられ
exit
たため、元のシェルセッションに戻りませんbash
。また、これを使用して、
exec
現在のシェルの標準 I/O ストリームのリダイレクトを設定することもできます。現在の対話式シェルセッションに対してスペル校正(
setopt CORRECT
)が有効になっている場合は、nocorrect
以下を使用します。いいえコマンド変更を有効にします。一般的に:
$ setopt CORRECT $ seed zsh: correct 'seed' to 'sed' [nyae]? n zsh: command not found: seed
そして
nocorrect
:$ setopt CORRECT $ nocorrect seed zsh: command not found: seed
この
noglob
修飾子は現在のコマンドに対してワイルドカードを無効にします。$ noglob echo * *
noglob
修飾子がない場合は、*
パターンが展開され、結果の単語(現在のディレクトリのファイル名)が引数として提供されますecho
。他のシェルでは、ワイルドカードを使用して一時的にオフにしてから再びオンに
set -f
することができますset +f
。これは〜になります標準方式シェルでファイル名のグロービングを無効にします。このset -f
コマンドはシェルがエミュレートzsh
されるか、 。sh
ksh