エラー "ソート: 読み取れません: +1: 対応するファイルまたはディレクトリがありません" [閉じる]

エラー

だから私はUNIXコースのためのプロジェクトを開発しており、本のガイドラインを段階的に続けています。最近、シェルスクリプトで複数の関数を生成している間にコードが言ったように動作しているにもかかわらず、正しく実行されないという問題が発生しました。

背景情報: - ソースディレクトリが存在します。 - corp_phones ファイルがそのディレクトリに存在します。 - 関数を使用する前にロードしました。

これは私のスクリプトです。

sort_name()
 {
   sort +1 -t: ~/source/corp_phones
 }
sort_date()
 {
   sort +6 -t: ~/source/corp_phones
 }
sort_dept()
 {
   sort +4 -t: ~/source/corp_phones
 }

ベストアンサー1

つまり、ソートに使用する構文は、以前のバージョンのPOSIXからのものです。 ~からcoreutils ソートマニュアル:

POSIX 1003.1-2001に準拠していないシステムでは、ソートはソートキーを指定するための既存の原点-0構文 "+pos1 [-pos2]"をサポートします。yが「0」または存在しない場合、既存のコマンド「sort + ax -by」は「sort -k a + 1.x + 1, b」に等しく、そうでなければ「sort -k a +」に等しくなります。 1.x" + 1,b+1.y'。

このレガシー動作は、_POSIX2_VERSION環境変数を使用して制御できます(標準準拠を参照)。 "-pos2"でレガシー構文を使用して、POSIXLY_CORRECTが設定されていない場合でも有効にできます。

標準ホスト用のスクリプトはレガシー構文を回避し、代わりに-kを使用する必要があります。

従来の動作を復元することは可能ですが、最新の構文を使用する方が簡単です。

この+1オプションは、2番目のフィールドから行末までのソートキーを定義します。これに対応する新しいオプションはです-k 2。したがって、使用する必要がある新しいコマンドsortは次のとおりです。

sort -k 2 -t: ~/source/corp_phones
sort -k 7 -t: ~/source/corp_phones
sort -k 5 -t: ~/source/corp_phones

おすすめ記事