"/" 内にある場合のみ: alias ls='ls -I test'?

~/.bashrc出力からリストを非表示にするには、次のものがあります。testls

alias ls='ls -I test'

testただし、現在の作業ディレクトリがルート(/)フォルダの場合にのみ非表示になり、他のフォルダにあるときは非表示にしたいです。

この目標をどのように達成できますか?

ベストアンサー1

ls () {
  case "$PWD" in
    /) command ls -I test "$@" ;;
    *) command ls "$@" ;;
  esac
}

上記のシェル関数は現在のディレクトリをテストし、テスト結果に応じて異なる方法で/GNUコマンドを実行します。ls

"$@"元のコマンドラインのコマンドラインオプションとオペランドに置き換えられます。

シェル関数の検索をバイパスするには、関数内でcommand ls代わりに使用する必要があります(そうでない場合は、素晴らしい無限再帰が提供されます)。lsls

になります。いいえ他の場所で実行する場合は、無視モードを使用してくださいls /〜するls /home/dvooたとえば、次から実行すると、/無視モードが使用されます。

実際に何をしたか覚えやすいようにするには(6ヶ月後に何をしたのか疑問に思う)、長いオプションを使用してください。

ls () {
  case "$PWD" in
    /) command ls --ignore='test' "$@" ;;
    *) command ls "$@" ;;
  esac
}

ls上記の関数の別の実装は、ある場所(またはより短い場所)でのみ呼び出されます。

ls () {
  [ "$PWD" = "/" ] && set -- --ignore='test' "$@"
  command ls "$@"
}

おすすめ記事