昨日、私が質問したことに対する後続の答えです。ディレクトリリストにファイルサイズの合計を表示します。。
ありがとうピレウスゼロそして正しい方向の点森津ハンセン、私は今
function dir() {
ls -FaGl "${@}" | awk '{print; total += $4}; END {print "\t\ttotal: ",total/1024,"KB"}'
}
私は.bash_profile
素晴らしい作品です。しかし、少なくともLinuxでは(まだOSXでは試してみる機会がありませんでした)、ssh
XPでPuTTYを使用すると、ディレクトリの色が消えました。カラーコードをawkステートメントにリンクする方法はありますかprint
?
修正する
ありがとう、Suk Mingdeに行ったことがありますか?回答、--color=always
以前に設定したように追加するだけですauto
。ただし、ディレクトリリストの最後と行全体の間にスペースがあります。
[19:30:58 mattdmo@server ~/webapps/django15 ] $ dir
drwxr-xr-x 7 mattdmo 4096 Mar 24 20:28 ./
drwxr-xr-x 17 root 4096 Mar 18 20:15 ../
drwxr-xr-x 7 mattdmo 4096 Mar 14 14:57 apache2/
drwxr-xr-x 3 mattdmo 4096 Mar 14 14:57 bin/
drwxr-xr-x 2 mattdmo 4096 Mar 24 20:10 lib/
drwxr-xr-x 3 mattdmo 4096 Mar 14 14:57 myproject/
drwxrwxr-x 3 mattdmo 4096 Mar 24 20:28 pigimal/
total: 28 KB
[19:30:59 mattdmo@server ~/webapps/django15 ] $
このトラブルシューティングに関する提案はありますか?
ベストアンサー1
色は使用中に維持する必要がありますls --color=always
。それがgnuに固有のものかどうかはわかりません。 [OP編集:はい。]
ls
出力がttyに行くかどうかを検出する場合です。
それ以外の場合、通常は色は印刷されず、変換されません。
「印刷できない文字」疑問符まで。これは追加することで行うことができます。-q
オプション。
このトピックに関する追加情報:lsが出力するライン数。
いくつかのカラーデータのgnu coreutils source ls;ref:
編集する:
gnu coreutils lsの場合:--color=always
OS Xのls:環境変数を設定し、CLICOLOR_FORCE
色G
を示します。コアコンプライアンスls IEEE規格1003.1-2001。他のオプションは、インプリメンテーション間の慎重な拡張です。
わかりました、これについてもっと深く研究しました。私が読んだことによれば、人々はOS Xにgnu coreutilsもインストールしますが、次のものを使用することもできるようです。オリジナル。
これOS X ls のマニュアルページ状態:
CLICOLOR_FORCE
Color sequences are normally disabled if the output isn't directed to a
terminal. This can be overridden by setting this flag. The TERM
variable still needs to reference a color capable terminal however
otherwise it is not possible to determine which color sequences to use.
ソースから:
Mac OS X 10.8.2 ソースコード->file_cmds-220.7->笑
また、このコードを見ると、次のように設定できることがすぐ明らかです。
CLICOLOR_FORCE
強制色。
パラメータとsetenv
色を最初に解析するときG
:
case 'G':
setenv("CLICOLOR", "", 1);
break;
解析後argv
:
/* CLICOLOR is set AND is a tty OR */
if (getenv("CLICOLOR") && (isatty(STDOUT_FILENO) ||
etenv("CLICOLOR_FORCE")))
/* force cli color is set */
次のセクションでは、TERMが設定されている場合は色が使用されます。
if (tgetent(termcapbuf, getenv("TERM")) == 1) {
echo $TERM
色付きの端末を製造する必要があります。しかし、普通に色が出るとこんな現象が現れるでしょう。
---
最後のアップデートで編集:
わかりません。変です。追加の行があるだけでなく、total ...
そもそも行もありません。次のような出力を確認することで開始できます。
function dir() {
/bin/ls -FaGl "${@}" | awk '
function chr2hex(chr) {
return sprintf("%02x", index(i2x, chr));
}
function str2hex(str) {
r = ""
for (i = 1; i <= length(str); ++i)
r = r chr2hex(substr(str, i, 1));
return r;
}
BEGIN {
i2x = ""
for (i = 0; i < 256; ++i)
i2x = sprintf("%s%c", i2x, i);
printf("FNR : %d\n", FNR);
printf("FIELDWIDTHS: \"%s\"\n", FIELDWIDTHS);
printf("FS : \"%s\"\n", str2hex(FS));
printf("RS : \"%s\"\n", str2hex(RS));
printf("OFS : \"%s\"\n", str2hex(OFS));
printf("ORS : \"%s\"\n", str2hex(OFS));
}
{
printf("%2d:%2d:%2d \"%s\"\n", FNR, NR, NF, $0);
total += $4;
}
END {
printf("%21s: %d %s\n", "total", total / 1024, "KiB");
printf("FNR : %d\n", FNR);
printf("From : \"%s\"\n", FILENAME);
}
'
}
あなたに次のようなものを与える必要があります -(~から愚かな可能性があります"-"
):
$ ./dir testdir
FNR : 0
FIELDWIDTHS: ""
FS : "20"
RS : "0a"
OFS : "20"
ORS : "20"
1: 1: 2 "total 24"
2: 2: 8 "drwxrwxr-x 6 mattdmo 4096 Apr 17 21:46 ./"
3: 3: 8 "drwxrwxr-x 8 mattdmo 4096 Apr 18 10:47 ../"
4: 4: 8 "drwxrwxr-x 2 mattdmo 4096 Apr 17 21:46 ab1/"
5: 5: 8 "drwxrwxr-x 2 mattdmo 4096 Apr 17 21:46 ab2/"
6: 6: 8 "drwxrwxr-x 2 mattdmo 4096 Apr 17 21:46 ab3/"
7: 7: 8 "drwxrwxr-x 2 mattdmo 4096 Apr 17 21:46 ab4/"
total: 24 KB
FNR : 7
From : ""