web-dev-qa-db-ja.com

bash / zshエイリアス:引数を取得してサブシェル内で使用できますか?

「。」で辞書順にディレクトリリストを表示するエイリアスが欲しいのですが。最初にファイル。私自身のスクリプトを書かずにこれを達成するためのいくつかの方法の1つは(実際の問​​題ではありません)、ロケールを_LC_ALL="C"_で設定することです。 (これは、ソートのマニュアルページおよび他の複数のサイトによるものです)。

ただし、ロケールを「C」に設定すると、一部のソフトウェアのインストールが中断する可能性があります(実際に発生します)。したがって、私の短期的な解決策はこれに似ています(簡潔にするために、これには追加のlsオプションはありません)。

alias ls='(LC_ALL="C"; /bin/ls)'

ただし、これでは引数をサブシェルに「渡す」ことはできません。

もちろん、これは機能しません。

alias ls='(LC_ALL="C"; /bin/ls $*)'

単純なエイリアスでこれを処理する方法はありますか? (私ができるシェルスクリプト/関数を書くのとは対照的に)。

サブシェルは必要ありません。コマンドの前に変数代入なしセミコロンを付けることで、次のコマンドの環境を変更できます。たとえば、の出力を比較します

LC_ALL=C env | grep LC_ALL

の出力で

env | grep LC_ALL

したがって、長い話を短くするために、次のエイリアスが機能するはずです。

alias ls='LC_ALL=C /bin/ls'

私はあなたの例のように/bin/lsを使用しましたが、別の回答へのコメントでKamil Maciorowskiが指摘しているように、lsコマンドを入力したこともエイリアスである可能性があります。したがって、おそらくその代替案も検討する必要があります。

alias ls='LC_ALL=C ls'
10
mpy