コンテキスト
私がいるディレクトリには3つのフォルダがあります。実行後のls -1
順序は次のとおりです。
folder1
folder2
folder3
cd
早く入りたいですfolder2
。
cd
すぐに関数を書くことができましたfolder1
それは私の責任です。
f1 () {
cd $(ls -d */|head -n 1)
}
質問
という関数が必要ですf2
。実行するとcd
sが入力されます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
-v
a
_
参考にしてください。あなたはできますls | head -2 | tail -1
出力リストから2番目のファイル名を取得するのと同じ方法を使用してくださいls
。これは改行文字を含むファイル名には機能せず、シェルがそれ自体で実行できる操作を実行するには1つではなく3つの外部プロセスが必要なため、これはあまり良い解決策ではありません。 。ls */
もっと愚かなのはここにあるからシェルglobを展開し、受け取ったls
名前だけを印刷します。バラよりhttps://mywiki.wooledge.org/ParsingLs依存関係出力でls
発生する可能性のある問題の詳細をご覧ください。