これはxterm:では期待どおりに実行されますが、xterm:などのスクリプトでは実行されsha512sum <filename> | cut -c -$COLUMNS
ません。言えば分からないからです。#! /bin/bash
dothis.sh <args>
$COLUMNS
$COLUMNSをパラメータとして渡したり、環境にエクスポートしたりしないことをお勧めします。
スクリプトは重要ではありません。 1つのシステムのxtermコマンドラインから実行できます。
Linux pre 3.2.0-4-amd64 #1 SMP Debian 3.2.81-2 x86_64 GNU/Linux
GNU bash, version 4.2.37
XTerm(278)
答え1
bashはシェル変数を設定COLUMNS
し、LINES
インタラクティブモデル(問題があるサイズ確認これらの区別につながる特性)。この情報は様々な方法で得ることができる。
質問の文脈でシェルスクリプトを作成する方法を知っていますが、役に立つデータをどこで取得できるかわかりません。
私のウィンドウには40行と80列があります。
tput cols
まず、環境変数を試してから(ユーザー環境に設定されていないので大丈夫です)、システムの端末設定、端末の説明を試してください。端末記述にディメンションを置くのは、bashなどのtermcapアプリケーションで使用される支柱です。たとえば、次のような数字のみを受け取ります。40
歴史的失敗のため、FreeBSDシステムで(参照歴史そして移植性コメント)を使用する必要があります。
tput co
、なぜなら(terminfoでncursesをシステムライブラリとして使用しても)ncursestput
FreeBSDで使用しないでください。もちろん、NetBSDとOpenBSDは別の方向に向いていました。stty size
(多くのプラットフォームで利用可能)端末設定で行/列の値を提供します。この値が使用できない場合は何も提供されません。シェルから簡単に分割できる2つの数字のみを提供します。40 80
resize
端末自体を試して(エスケープシーケンスを使用)、端末設定を更新して一致させます。 Bashの場合は、次のものを使用できます。resize -u
、次の出力を提供します。
列= 80; 行= 40; 列ラインのエクスポート;
cron
端末が関連していないため、これらのオプションのどれもあまり使用されません。ただし、端末ではすべて使用できます。
答え2
COLUMNS=$(tput cols)
または一行で
sha512sum <filename> | cut -c -"$(tput cols)"