私はコマンドに関連していないこの質問に対する答えを探していますless
。
ls
端末でコマンドを実行し、長いファイル名が改行されるのを防ぐ方法はありますか?
たとえば、次の代わりにlsを実行した場合:
shortfile
thisisalongfi
lename
shortfile
ラップする必要があるか、まったくラップしないはずの長いファイル名を切り取り、次のように読みたいと思います。
shortfile
thisisalongfi
shortfile
答え1
setterm --linewrap off
ls
setterm --linewrap on
setterm
ターミナル(ターミナルエミュレータ)の設定に取り組んでいきますが、通常ターミナルはこの機能をサポートする場合とサポートしない場合があります。
答え2
このls
コマンドにはファイル名を切り捨てるオプションがないため、追加のツールが必要です。
あなたはそれを使用することができますcut
行を切ります。端末では、環境変数には端末サイズがLINES
含まれます。COLUMNS
ls | cut -c 1-$COLUMNS
ls
これにより、しばしばエイリアシングされるシェーディングが抑制されます。シェーディングをテキストツールベースの切り捨てと組み合わせる簡単な方法はありません。端末自体にカットするように指示する。
答え3
ラップされたファイル名とラップされていないファイル名を区別するのは難しいので、標準fold(1)
コマンドはここで少し悪いです。
$ printf 'short\nlongeshort\nshort\n' | fold -w 5
short
longe
short
short
GNUはsed
動作しますが、バックスラッシュのためにいくつかの問題があります。
$ printf 'short\nlongeshort\nshort\n' | gsed 's/\(.\{5\}\).*/\1/'
short
longe
short
awk
線が切り取られる位置を表示できます。
$ printf 'short\nlongeshort\nshort\n' |
awk -v w=5 '{if(length > w){print substr($0,0,w-3) "..."}else{print}}'
short
lo...
short
幅パラメータを許可するスクリプトでは、非表示になっているか、デフォルトで使用する必要がありますw
。$COLUMNS
同時に、
$ setterm --linewrap off
ksh: setterm: not found
$ pkglocate setterm
$
携帯性にあまり役に立ちません。