使用法:

使用法:

コンテキスト

私がいるディレクトリには3つのフォルダがあります。実行後のls -1順序は次のとおりです。

folder1
folder2
folder3

cd早く入りたいですfolder2

cdすぐに関数を書くことができましたfolder1

それは私の責任です。

f1 () {
       cd $(ls -d */|head -n 1)
}

質問

という関数が必要ですf2。実行するとcdsが入力されますfolder2


(フォルダはでソートされますls -1。私はを使用していますzsh

ベストアンサー1

Shell globはデフォルトでアルファベット順にソートされており、Zshではglobの結果の直接索引付けが可能になるため、次のことができます。

cd2() {
    cd -- */([2]);       # indexing starts at one
}

Bashでは、配列を使用して同じことを実行できます。

cd2() {
    local dirs=(*/)
    cd -- "${dirs[1]}"   # indexing starts at zero
}

両方とも、本質的に少なくとも2つのグローバルマッチングがあると仮定する。バラよりコサロナンダの答えこの仮定を扱う方法を学びなさい。

また、ls別名を使用してフラグを立てると、ソート順がシェルのソート順と異なる場合があります。 (私はLinuxでエイリアスを使用し、並びls替え順序も変更しました。)もちろん、Zshは他のさまざまな並べ替えオプションも提供します。ls -vF --color=auto-va_


参考にしてください。あなたはできますls | head -2 | tail -1出力リストから2番目のファイル名を取得するのと同じ方法を使用してくださいls。これは改行文字を含むファイル名には機能せず、シェルがそれ自体で実行できる操作を実行するには1つではなく3つの外部プロセスが必要なため、これはあまり良い解決策ではありません。 。ls */もっと愚かなのはここにあるからシェルglobを展開し、受け取ったls名前だけを印刷します。バラよりhttps://mywiki.wooledge.org/ParsingLs依存関係出力でls発生する可能性のある問題の詳細をご覧ください。

おすすめ記事