永続的な解決策:ファイル、文字列がコマンドラインに混在しない

永続的な解決策:ファイル、文字列がコマンドラインに混在しない

ファイルに改行文字が含まれていません。

ファイルの最後の行は、コマンドプロンプトのユーザー名と混在します。

文書:

line 1

テスト:

user /: cat file
line 1user /:

提案された回避策は、ファイルに新しい行終端を追加することです。

そのような解決策はどのように正しいと考えることができますか?

これは、将来、ファイルが新しい行終端者なしで保存されると、私たちの気分を台無しにすることができることを意味します。

ロジックは..何も信じてはいけないと提案します。しかし、あなたは正しいはずです。

したがって、私が正確にしたい場合。改行の有無にかかわらず、特定の文字列の末尾に自分のユーザー名が表示されることを許可しないでください。

私は彼らに頼ってはいけません。

私は自分自身の存在でなければなりません。

私のユーザー名が「改行なし」ファイルまたは文字列の犠牲にならないようにする代替ソリューションはありますか?

「尾」などの他の機能が正しく機能しなくなるため、解決策が存在しない可能性がありますか?

しかし、論理が必要です。

いくつかのロジックを探しています。

答え1

そのような解決策はどのように正しいと考えることができますか?

目的は、cat実際にファイルを表示することではないからです。これは副作用です。

目的catスカムアイナットファイル(したがって名前)です。これは、各ファイルを順番に読み取り、各ファイルの内容を標準出力に出力する方法で行われ、必要に応じて再度リダイレクトできます。

catプロセスの標準出力はデフォルトで端末にバインドされているため、ファイルの内容を簡単に表示するためによく使用されます。ページャは、less次の専用ポケットベルを使用してファイルを表示することもできます。more故意にファイルを表示するために使用されます。

出力または各ファイルの内容を改行文字で終了すると、長期契約がcat破棄されます。実際にファイルをリンクするのにはもう役に立ちません。大きなファイルを複数の部分に分割し、変更されたファイルを使用してその部分を再結合すると、cat結果は開始時とは異なる場合があります。

UNIXの哲学は、各ツールが小さなことをうまく実行できるようにし、異なるツールを組み合わせてより大きなコンテキストを形成できるようにすることを覚えておいてください。これがすぐにコマンドを実行するためにリモートホストにssh'ingし、sshセッションの出力をローカルツール(awk、perl、grepなど)にパイプして出力を処理し、結果をパイプするなどのタスクを実行できる理由です。 。たとえば、lprハードコピー印刷を取得したり、less前後にスクロールしたりする機能を使用して検索します。すべてのツールは標準出力から標準入力に移動し、各ツールは1つの操作のみを実行し、ほとんどの単純なツール(およびそれほど単純ではない多くのツール)はデフォルトでこのパターンに従うか、適切なコマンドラインパラメータを使用しますこのパターンに従うことができます。

私のユーザー名が「改行なし」ファイルまたは文字列の犠牲にならないようにする代替ソリューションはありますか?

もちろんです。次のように改行文字で始まるようにプロンプ​​トを設定します。

$ printf 'hello' > $TMP/hello
$ PS1='\u \W: '
michael ~: cat $TMP/hello
hellomichael ~: PS1='\n\u \W: '

michael ~: cat $TMP/hello
hello
michael ~:

関連情報