From owner-freebsd-users-jp@freebsd.org Tue Nov 6 13:23:28 2018 Return-Path: Delivered-To: freebsd-users-jp@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E58021123AC3 for ; Tue, 6 Nov 2018 13:23:27 +0000 (UTC) (envelope-from CQG00620@nifty.ne.jp) Received: from condef-04.nifty.com (condef-04.nifty.com [202.248.20.69]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 8D1F17663B for ; Tue, 6 Nov 2018 13:23:26 +0000 (UTC) (envelope-from CQG00620@nifty.ne.jp) Received: from conssluserg-02.nifty.com ([10.126.8.81])by condef-04.nifty.com with ESMTP id wA6DFVFb018402 for ; Tue, 6 Nov 2018 22:15:31 +0900 Received: from nifty.com (g036187.dynamic.ppp.asahi-net.or.jp [211.132.36.187]) (authenticated) by conssluserg-02.nifty.com with ESMTP id wA6DErDn002299 for ; Tue, 6 Nov 2018 22:14:58 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-02.nifty.com wA6DErDn002299 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.ne.jp; s=dec2015msa; t=1541510098; bh=vqLCRpILo4cIk/nzSJw+ZmXctFYc2CMGm10krHabg3c=; h=Date:From:To:Subject:In-Reply-To:References:From; b=DHCGYSghWU7ROncf50W1/czAbwBFDonTZ4acb8ACo3bGHzeNLAm5Dskcx4CpYEZlG zsmsLu5wRXAwkNghnqbO8V6YHm50xOyDzPRjXU56otxadxDZ1cpuXz6K8S4Bj+Sjuu /npBtuFh+/IzNuVqQL7ssf/mSRIPKc5Ud7GvfUZNFDHU8xf8ONgY6JpUgGlQ+VkeBc 2TOXyjKgzrVo9j8vm7dUN9Ai+u0ikRuzeJDtqQrfqyFkRA4IamfGKWmcd3ttWAxWn2 M4AhX28FrwQXqWnf0RaQSC0YKrwJ3nWI1eEgMK9Xih/FS5Z2gMdFHg1YpVH41dn8l8 5aALlqabqgKgw== X-Nifty-SrcIP: [211.132.36.187] Message-Id: <201811061314.wA6DErDn002299@conssluserg-02.nifty.com> Date: Tue, 06 Nov 2018 22:14:48 +0900 From: WATANABE Kazuhiro To: FreeBSD-users-jp In-Reply-To: <20181024115101.f6049ef61a82a1fdbab1a404@mogami.com> References: <20181014194410.b466d0bbf0e976ffbcab2969@mogami.com> <20181024115101.f6049ef61a82a1fdbab1a404@mogami.com> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI/1.14.6 (Maruoka) FLIM/1.14.9 (=?ISO-2022-JP-2?B?R29qGyQoRCtXGyhC?=) APEL/10.8 Emacs/26 (amd64-portbld-freebsd10.4) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset=ISO-2022-JP X-Rspamd-Queue-Id: 8D1F17663B X-Spamd-Result: default: False [-2.15 / 200.00]; ARC_NA(0.00)[]; NEURAL_HAM_MEDIUM(-0.71)[-0.714,0]; R_DKIM_ALLOW(-0.20)[nifty.ne.jp]; FROM_HAS_DN(0.00)[]; R_SPF_ALLOW(-0.20)[+ip4:202.248.20.0/24]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.10)[text/plain]; PREVIOUSLY_DELIVERED(0.00)[freebsd-users-jp@freebsd.org]; RCPT_COUNT_ONE(0.00)[1]; RCVD_COUNT_THREE(0.00)[3]; TO_DN_ALL(0.00)[]; DKIM_TRACE(0.00)[nifty.ne.jp:+]; DMARC_POLICY_ALLOW(-0.50)[nifty.ne.jp,none]; RCVD_IN_DNSWL_NONE(0.00)[69.20.248.202.list.dnswl.org : 127.0.10.0]; MX_GOOD(-0.01)[mx2.nifty.com]; NEURAL_SPAM_LONG(0.21)[0.209,0]; NEURAL_HAM_SHORT(-0.63)[-0.629,0]; RECEIVED_SPAMHAUS_PBL(0.00)[187.36.132.211.zen.spamhaus.org : 127.0.0.11]; FROM_EQ_ENVFROM(0.00)[]; RCVD_TLS_LAST(0.00)[]; ASN(0.00)[asn:2510, ipnet:202.248.0.0/16, country:JP]; IP_SCORE(-0.01)[country: JP(-0.04)]; RWL_MAILSPIKE_NEUTRAL(0.00)[69.20.248.202.rep.mailspike.net : 127.0.0.13] X-Rspamd-Server: mx1.freebsd.org Subject: [FreeBSD-users-jp 96344] Re: =?iso-2022-jp?b?RnJlZUJTRC0xMS4yIBskQiROGyhCIGphX0pQLmV1Y0pQ?= =?iso-2022-jp?b?IBskQjRENi0bKEI=?= X-BeenThere: freebsd-users-jp@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion relevant to FreeBSD communities in Japan List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 06 Nov 2018 13:23:28 -0000 渡辺一寛です。 On Wed, 24 Oct 2018 11:51:01 +0900, Kouichi Hirabayashi wrote: > 不具合自体は、ja_JP.eucJP 環境で /bin/sh に非 ASCII 文字を > 入力すると正常終了してしまうというもので、起動した sh に > などをキー入力したり、EUC 漢字コードを入力あるいは > paste することで確認できます。 手元で 11.2-RELEASE/amd64 をセットアップしてみましたが、確かにそうなり ます。ja_JP.SJIS でも同様です。 # UTF-8 については後述。 > /bin/sh が ja_JP.eucJP 環境で使えなくなってしまった理由は、 > > /usr/src/lib/libedit > /usr/src/bin/sh > > の両方が ja_JP.eucJP 環境が使えなくなるように変更されてしまっ > たことにあります。 > > sh については parser.h で定義される字句構文解析用の文字種識別 > token に EUC-JP 漢字コードの 2 byte 目の使用範囲と重複する > 値を使ってしまったため、EUC-JP 文字や Atl-A, Alt-B, .. な > どを含む文字列が解釈不能になります。 > > libedit でも EUC-JP が使えないように書き換えられていますが、 > read.c には「#ifdef KANJI」といったコードが残っていて、そ > の「KANJI」を define すると compile できなくなるといった状 > 態で、書き換えの真の意図は理解できません。EUC-JP が使えない問 > 題に関係するのは chartype.c, el.c, read.c といったところ > です。 > > EUC-JP 環境が必要な状況での対策としては、libedit と sh の > 両方を書き換えて EUC-JP が使える sh を作る方法以外に、sh の > 使用をあきらめて、csh, tcsh bash, rbash で代替する方法が > あります。 FreeBSD ワークショップでも話が出た (出ない?) ようですが、私が手元でやっ てみた具体的な回避策を 2 つ。 (1) sh を作りなおす sh のソースを眺めてみましたが、NO_HISTORY というのを定義すると libedit (editline(3)) の機能を使うコードがオミットされるようです。試しに Index: bin/sh/Makefile =================================================================== --- bin/sh/Makefile (revision 339812) +++ bin/sh/Makefile (working copy) @@ -19,7 +19,7 @@ # utilities of the same name are handled with the associated manpage, # builtin.1 in share/man/man1/. -LIBADD= edit +#LIBADD= edit CFLAGS+=-DSHELL -I. -I${.CURDIR} # for debug: Index: bin/sh/shell.h =================================================================== --- bin/sh/shell.h (revision 339812) +++ bin/sh/shell.h (working copy) @@ -51,6 +51,7 @@ #define JOBS 1 /* #define DEBUG 1 */ +#define NO_HISTORY /* * Type of used arithmetics. SUSv3 requires us to have at least signed long. として sh を作りなおしたところ、ja_JP.eucJP または ja_JP.SJIS な環境で も、コマンドラインに日本語入力できるようになりました。libedit の編集機 能に加えてヒストリも使用出来なくなりますが、少し使ってみた限り、基本動 作に支障はないように見えます。 (2) set +o emacs してコマンドライン編集機能を無効にする sh を起動後に set +o emacs (または set +E) するか、sh を "sh +E" で起 動すると、(1) と同様にコマンドラインに日本語入力できるようになりました。 なお editrc(5) によって libedit の編集機能を無効にすることもできます。 設定すると確かに無効になるのですが、日本語入力に関しては効果がありませ んでした。 > /bin/sh を EUC-JP で使えなくした原因の一つである libedit > のソースの comment > > /* FIONREAD attempts to buffer up multiple bytes, and to make that work > * properly with partial wide/UTF-8 characters would need some careful work. */ > > /* > * We don't support other multibyte charsets. > * The second condition shouldn't happen > * and is here merely for additional safety. > */ > > を見ると、ASCII と UTF-8 限定という意図かもしれませんが、も > しそうなら、/bin/sh でも sh を起動した時点で、ja_JP.eucJP > 環境の場合は「ja_JP.eucJP は使えない」という警告を出して終 > 了すべきですし、/bin/sh はシステムの根底の一つですから、 > ja_JP.eucJP 自体をなくすといった作業と告知も必要なはずで、 > 理解に苦しみます。 現在の libedit は NetBSD 由来なので、試しに NetBSD 8.0 をセットアップ してみたところ、FreeBSD 11.2 と同様の結果になりました。 ja_JP.eucJP または ja_JP.SJIS な環境での、コマンドラインへの日本語入力 の可否は次のようになります。 FreeBSD 11.2 NetBSD 8.0 素の sh 入力不可・突発終了 入力可 set -o emacs 入力不可・突発終了 入力不可・突発終了 set +o emacs 入力可 入力可 FreeBSD 11.2 と NetBSD 8.0 の、素の sh の挙動の違いは、インタラクティ ブシェルとして sh を起動した時に、編集機能がデフォルトで有効かどうかに 因るもののようです。編集機能を明示的にオン/オフすれば、ほぼ同じ挙動に なりました。 # FreeBSD はデフォルトで有効。 # NetBSD はログインシェルが sh の場合に有効。 なお NetBSD 7.2 の挙動は少し違って、編集機能が有効な場合、日本語入力は 無視され、表示もされません。このほうが突発終了するよりはマシかも知れま せん。 *** まっとうな解決策は、EUC/SJIS 環境でも今まで同様にマルチバイト文字の入 力が可能なように修正することだと思いますが、NetBSD のように、sh のコマ ンドライン編集機能をデフォルトで off にするだけでもいいかなと思います。 sh のコマンドライン編集機能、ワンライナーをちょろちょろ書くには十分で、 便利に使ってたんですけどね。 *** ついでに ja_JP.UTF-8 な環境でも、sh のコマンドラインへの日本語入力を試 してみました。 FreeBSD 11.2 の場合、編集機能の有効/無効に関係なく入力できます。ただし カーソルキーで履歴を辿ったり、編集を行なったりすると、表示がずれたり抜 けたりします。これは表示だけの問題のようで、Ctrl-L で再表示すると直り ます。 NetBSD 8.0 の場合も、編集機能の有効/無効に関係なく、問題なく入力できま す。また履歴も編集も問題ありません。libedit のリビジョンが NetBSD 8.0 のほうが新しいので、それによる違いかも知れません。 --- WATANABE Kazuhiro (CQG00620@nifty.ne.jp)