一行に減らしたいです。
if ls --version 2>/dev/null | grep -q 'coreutils'; then alias ls='ls --color=always'
else alias ls='ls -G'
fi
たとえば、私はしばしば[]
条件文を使用し[ -z(or -n) condition]
ますが、この形式で別の部分を実行したことはありません。
Rubyではこれを行います。condition ? true : false
Bashにも同等のものはありますか?
頑張った
[ -z ls --version 2>/dev/null | grep -q 'coreutils'] ? alias ls='ls --color=always' : alias ls='ls -G'
しかし、明らかにこれは正しいアプローチではありません。
私はすべてを.bashrc
小さなウィンドウ(<〜50行)に合わせたいので、1行が必要です。したがって、他の複数行の行と同様に、できるだけ1行に圧縮します。この例では、サイズが大きいため、読みやすさを犠牲にする意図があります。
私も次のことを試しました。
[ -z ls --version 2>/dev/null | grep -q 'coreutils'] && alias ls='ls --color=always' || alias ls='ls -G'
そして
[ -n ls --version 2>/dev/null | grep -q 'coreutils'] && alias ls='ls --color=always' || alias ls='ls -G'
そして
[ ls --version 2>/dev/null | grep -q 'coreutils'] && alias ls='ls --color=always' || alias ls='ls -G'
しかし、私はいつも「then」エイリアスの代わりに「else」エイリアスを取得します。
元に戻すことはできますが、うまく機能しないので役に立つかどうか疑問です。唯一の確実な方法は、OSXで試してみることです。私は今Ubuntuを使用しています。
ベストアンサー1
長すぎる博士。
使用
ls --color=always > /dev/null 2>&1 && alias ls='ls --color=always' || alias ls='ls -G'`
詳細...
[...]
条件式のみを評価する必要があります(ファイル統計、文字列比較、数値比較、参照CONDITIONAL EXPRESSIONS
)bash(1)
。彼らはまた建設に必要ですif ... ; then ...; else
。
比較的単純な構造の場合
if CONDITION; then
EXPR1
else
EXPR2
fi
に取り替えることができる
CONDITION && EXPR1 || EXPR2
最初の場合に必要でない限り、[...]
2番目の場合には必要ありません。
あなたの場合、CONDITION
これはls --version 2>/dev/null | grep -q 'coreutils'
戻りコードですgrep
。だからあなたは書くことができます
ls --version 2>/dev/null | grep -q 'coreutils' && alias ls='ls --color=always' || alias ls='ls -G'
ls
注:サポートされていることを直接確認する方が簡単です--color
。
ls --color=always > /dev/null 2>&1 && alias ls='ls --color=always' || alias ls='ls -G'