2

SSH経由でpfSense/BSDボックスにログインしているexpectスクリプトがあります。これは、Perlスクリプトによって呼び出され、出力をPerlスクリプト(RANCIDプラグイン)に返します。

現在、次の出力が得られています。

+ spawn ssh -2 -x -l rancid my-pfsense-device.fqdn.com
+ Password:
+ Last login: Wed Dec 19 10:28:47 2012 from 89.21.224.35
+ Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
+       The Regents of the University of California.  All rights reserved.
+
+
+  [0;1;33m[ [0;1;37m2.0.1-RELEASE [0;1;33m] [0;1;33m[ [0;1;37mrancid [0;1;31m@ [0;1;37mmy-pfsense-device.fqdn.com [0;1;33m] [0;1;32m/home/rancid [0;1;33m( [0;1;37m1 [0;1;33m) [0;1;36m [0;1;31m: [0;40;37m
uname -a
+ FreeBSD my-pfsense-device.fqdn.com 8.1-RELEASE-p6 FreeBSD
8.1-RELEASE-p6 #0: Mon Dec 12 18:59:41 EST 2011
root@FreeBSD_8.0_pfSense_2.0-snaps.pfsense.org:/usr/obj./usr/pfSensesrc/src/sys/pfSense_wrap.8.i386
 i386
+  [0;1;33m[ [0;1;37m2.0.1-RELEASE [0;1;33m] [0;1;33m[ [0;1;37mrancid [0;1;31m@ [0;1;37mmy-pfsense-device.fqdn.com [0;1;33m] [0;1;32m/home/rancid [0;1;33m( [0;1;37m2 [0;1;33m) [0;1;36m [0;1;31m: [0;40;37m
cat /cf/conf/config.xml
+ <?xml version="1.0"?>
+ <pfsense>

ここでの問題は、デスクトップからSSH経由でログインすると、ログインプロンプトが次のようになることです。

[2.0.1-RELEASE][username@my-pfsense-device.fqdn.com]/home/username(1):

しかし、これはさまざまな色です。上記の出力でわかるように、SSHはすべての色付け情報を渡され、期待されるスクリプトに出力されます。上記の出力では、同じ行が次のようになります。

[0;1;33m[ [0;1;37m2.0.1-RELEASE [0;1;33m] [0;1;33m[ [0;1;37musername [0;1;31m@ [0;1;37mmy-pfsense-device.fqdn.com [0;1;33m] [0;1;32m/home/username [0;1;33m( [0;1;37m1 [0;1;33m) [0;1;36m [0;1;31m: [0;40;37m

これをスクリプト化する方法はありますか?正規表現されるのは標準のカラーフォーマットですか、それともSSHクライアントのオプションを変更してカラーリング情報を無視する必要がありますか?

4

1 に答える 1

3

端末が色を表示できるかどうかは、TERM環境変数によって決まります。これは通常xtermlinuxまたはのようなものに設定されます(さらに良いものにするために接尾辞がscreen付いている場合があります)。-256colorうまくいけば、反対側のシェル(そしてもっと重要なのはシェル初期化スクリプト)が注意を払いTERM、呼び出し側の端末が実際に色をサポートしている場合にのみ色を使用しようとします。

を呼び出す直前に、その変数を設定してみることができますssh。「インタラクティブおよびカラー機能のない端末」に設定する通常の値はdumbです。

于 2012-12-20T10:55:26.630 に答える