出力をラップしないようにbashを作成する方法は?


33

いくつかのコマンドが出力として長い行を生成するたびに(たとえば、ls -l長い名前のファイルを含むフォルダーの場合)、長い行は次の行に折り返されるため、列構造が混乱します。

これを回避する方法はありますか?'nowrap' vimオプションに似たもの


更新

私は受け入れられた答えに問題があることに気づきました:の
ようなエイリアスを作成してalias ll="tput rmam; ls -l; tput smam"
からgrepを試みると、その出力です:grepなしのように、すべてのファイルをll | grep foo
印刷ます。

私が見つけた解決策は、エイリアス全体をブラケットで囲むことです。
alias ll="(tput rmam; ls -l; tput smam)"



回答:


27

これはbash(コマンドを起動した後、bashはコマンドが終了するのを待つ)とは関係なく、ターミナルと関係があることに注意してください。

ほとんどの端末エミュレータは、デフォルトで右マージンで折り返します。ただし、ターミナルエミュレータでサポートされている場合は、適切な制御シーケンスを使用してこれをオフにすることができます。それから長い行は単に切り捨てられます:

printf '\033[?7l'
ls -l /a/folder/that/contains/files/with/long/names
printf '\033[?7h'

うん、これは私が探していたものです、ありがとうGilles!
ミハイロタル

12
より移植性の高い:tput rmam; ls -l longname; tput smam
通知があるまで一時停止。

さらに良い。しかし、[rs] mamはどこから来たのですか?tputとtermcapのマニュアルを検索しましたが、それらについて何も見つかりませんでしたか?
ミハイロタル

2
@Mihai:terminfoのドキュメントを試してください(man 5 terminfoLinuxの場合)。
ジル「SO-悪であるのをやめる」

確かに、そこにあります
ミハイロタル


5

次のような関数を使用できます。

nowrap() 
{ 
   cut -c-$(tput cols); 
}

ただし、コマンドの前に、nowrapまたは関数に名前を付けたものに接頭辞を付ける必要があります。


動作しますが、色分けができません。それを保存する方法はありますか?
ミハイロタル

3

関数をオーバーライドしtput rmam、grepの前後で自動的に実行されるようにすることができますtput smam

function grep () {
  tput rmam;
  command grep "$@";
  tput smam;
}

にドロップして、.bash_profile実行するたびにgrep、行の折り返しなしでgrep を実行します。

これは大幅に編集されていますが、コメンテーターに謝罪します。


sleep 20素晴らしいです:-)
チロSantilli新疆改造中心法轮功六四事件

2

-Sスイッチを使用してlessコマンドにパイプします。

ls -l | less -S

次に、上下の矢印を使用してスクロールし、qを入力して終了します。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.