Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bashログイン時のエラー #322

Closed
tm99hjkl opened this issue May 8, 2023 · 11 comments
Closed

bashログイン時のエラー #322

tm99hjkl opened this issue May 8, 2023 · 11 comments
Labels
External Problem/Bug Problems/Bugs of other projects

Comments

@tm99hjkl
Copy link

tm99hjkl commented May 8, 2023

バージョン

ble version: 0.4.0-devel4+f4c973b8

Bash version: 5.1.16(1)-release(x86_64-pc-linux-gnu)

バグと思われる挙動について

このような.bashrcを使っています.以下に挙動の動画を添付いたします.

3_3.tm@DESKTOP-6CIE7VC_.2023-05-08.21-19-07.mp4

この動画は,.bashrcの114行目をコメントアウトしている場合は正常に動作し,コメントアウトを解除して新しいシェルにログインすると,エラーが一気に出力される様子のキャプチャです.

ble.shを愛用していますので,bugfixしていただけますと大変助かります.よろしくお願いいたします.

@tm99hjkl
Copy link
Author

tm99hjkl commented May 8, 2023

参考になるかはわかりませんが,screenfetchの結果も添付します.
3_3  tm@DESKTOP-6CIE7VC_ ~ 2023_05_08 21_33_31

@akinomyoga
Copy link
Owner

akinomyoga commented May 8, 2023

ble.sh をお使いいただきありがとうございます。ご報告ありがとうございます!

ご報告いただいた .bashrc を試してみたのですが再現できません。Ubuntu 22.04/WSL2 も設定して試してみましたがそれでも再現しないようです。ただ、neofetch の出力する OS/Kernel 情報が異なるので何か構成が異なるのかもしれません。
image

質問がございます。114行目を追加すると問題が発生するとのことですが、逆に ble.sh 以外の設定をコメントアウトした場合にも症状は再現するでしょうか。もしそうでなければどの設定と一緒に用いた時に問題が発生するのか特定していただけますと助かります。

症状を拝見しますに恐らく ble.sh の内部関数の ble/util/assign が用いている一時ファイルの内容が混ざり合っていることによるものではないかと現在は推測しています (ただ何故そのようなことが起こるのかについては量りかねています)。114行目をコメントアウトした状態で以下のコマンドを実行した時の結果を教えていただけますと幸いです。

$ type ble/util/assign
$ type ble/util/assign/.mktmp
$ type local
$ echo "$SUBSHELL:$BASHPID:$$"
$ (echo "$SUBSHELL:$BASHPID:$$")
$ declare -p _ble_local_tmpfile

追記: 以下の結果もできればお願い致します。

$ declare -p _ble_base_run
$ ls -la "$_ble_base_run"

ちなみにご報告のエラーメッセージだけでしたら .bashrc 12行目--inputrc=none を追加して関連する機能を off にしていただければ、取り敢えずは抑えることができるのではないかと思いますが、恐らく根本的解決にはならないのではないかと考えています。

@tm99hjkl
Copy link
Author

tm99hjkl commented May 9, 2023

早速ご確認いただきありがとうございます。

まず,以下を確認しました:

  • .bashrcの114行目だけを有効にし,他すべてをコメントアウトしたとき,同様のエラーは起きませんでした.
  • .bashrcの12行目と114行目を有効にし,他すべてをコメントアウトしたとき,同様のエラーが起きました.

いただいたコメント内のコマンドを実行すると以下のようになりました:

$ type ble/util/assign
ble/util/assign is a function
ble/util/assign ()
{
    local _ble_local_tmpfile;
    ble/util/assign/.mktmp;
    builtin eval -- "$2" >| "$_ble_local_tmpfile";
    local _ble_local_ret=$? _ble_local_arr=;
    mapfile -t _ble_local_arr < "$_ble_local_tmpfile";
    ble/util/assign/.rmtmp;
    IFS='
' builtin eval "$1=\"\${_ble_local_arr[*]}\"";
    return "$_ble_local_ret"
}
$ type ble/util/assign/.mktmp
ble/util/assign/.mktmp is a function
ble/util/assign/.mktmp ()
{
    _ble_local_tmpfile=$_ble_util_assign_base.$((_ble_util_assign_level++));
    ((BASH_SUBSHELL)) && _ble_local_tmpfile=$_ble_local_tmpfile.$BASHPID
}
$ type local
local is a shell builtin
$ echo "$SUBSHELL:$BASHPID:$$"
:1089:1089
$ (echo "$SUBSHELL:$BASHPID:$$")
:1560:1089
$ declare -p _ble_local_tmpfile
-bash: declare: _ble_local_tmpfile: not found
$ declare -p _ble_base_run
declare -- _ble_base_run="/mnt/wslg/runtime-dir/blesh"
$ ls -la "$_ble_base_run"
.rw-r--r-- 0 tm  9 May 10:19 1089.load
.rw-r--r-- 0 tm  9 May 10:21 1089.util.assign.tmp.0
.rw-r--r-- 0 tm  9 May 10:19 1089.util.message
.rw-r--r-- 0 tm  9 May 10:19 1089.util.message-listening
.rw-r--r-- 0 tm  8 May 21:05 16280.load
.rw-r--r-- 0 tm  8 May 21:05 16280.util.assign.tmp.0
.rw-r--r-- 0 tm  8 May 21:07 16518.load
.rw-r--r-- 0 tm  8 May 21:07 16518.util.assign.tmp.0
.rw-r--r-- 0 tm  8 May 21:07 16544.load
.rw-r--r-- 0 tm  8 May 21:07 16544.trap.DEBUG
.rw-r--r-- 0 tm  8 May 21:07 16544.util.assign.tmp.0
.rw-r--r-- 0 tm  8 May 21:07 16544.util.assign.tmp.1
.rw-r--r-- 0 tm  8 May 21:08 17280.load
.rw-r--r-- 0 tm  8 May 21:08 17280.util.assign.tmp.0
.rw-r--r-- 0 tm  8 May 21:08 17469.load
.rw-r--r-- 0 tm  8 May 21:08 17469.util.assign.tmp.0
.rw-r--r-- 0 tm  8 May 21:08 17636.load
.rw-r--r-- 0 tm  8 May 21:08 17636.util.assign.tmp.0
.rw-r--r-- 0 tm  8 May 21:09 18181.load
.rw-r--r-- 0 tm  8 May 21:09 18181.util.assign.tmp.0
.rw-r--r-- 0 tm  8 May 21:09 18181.util.assign.tmp.1
.rw-r--r-- 0 tm  8 May 21:09 18181.util.message
.rw-r--r-- 0 tm  8 May 21:09 18181.util.message-listening
.rw-r--r-- 0 tm  8 May 21:11 19434.load
.rw-r--r-- 0 tm  8 May 21:12 19434.util.assign.tmp.0
.rw-r--r-- 0 tm  8 May 21:11 19434.util.message
.rw-r--r-- 0 tm  8 May 21:11 19434.util.message-listening
.rw-r--r-- 0 tm  8 May 21:56 20213.load
.rw-r--r-- 0 tm  8 May 21:56 20213.util.assign.tmp.0
.rw-r--r-- 0 tm  8 May 21:56 20213.util.message
.rw-r--r-- 0 tm  8 May 21:56 20213.util.message-listening
.rw-r--r-- 0 tm  8 May 22:01 20448.load
.rw-r--r-- 0 tm  9 May 09:58 20448.util.assign.tmp.0
.rw-r--r-- 0 tm  8 May 22:01 20448.util.message
.rw-r--r-- 0 tm  8 May 22:01 20448.util.message-listening
.rw-r--r-- 0 tm  9 May 10:06 31501.load
.rw-r--r-- 0 tm  9 May 10:06 31501.util.assign.tmp.0
.rw-r--r-- 0 tm  9 May 10:06 31501.util.message
.rw-r--r-- 0 tm  9 May 10:06 31501.util.message-listening

(また,.bashrc 12行目 で --inputrc=none を追加して新しいシェルにログインしたところ,プロンプトにRR1R5R9R2R6RRRR2R6RRRR2Rという文字列が入力された状態でシェルが開始されることを確認しました.参考になるかは分かりませんが...)

@akinomyoga
Copy link
Owner

ご回答いただきありがとうございます。

先の返信にて環境の構成が異なるかもしれないとお書きしましたが screenfetch を neofetch と勘違いしておりました。改めて screenfetch で確認した所、Linux kernel version が異なる以外は同様の環境のようです。失礼いたしました。

image


ble.sh の設定だけで問題が発生するとのこと承知しました。そうするとシステムの bash 設定、inputrc 設定や端末などの外部要因が関係しているのかもしれません。

一連のコマンドの結果についてご提供いただきありがとうございます。これらを拝見する限りは特に大きな異常はないように思います。ただ、ls -la "$_ble_base_run" の結果の中に . および .. の結果がないのは気になります。改めて以下も確認していただけますか。

$ ls -ld "$_ble_base_run"

関係あるかどうかは分かりませんが WSL1 で microsoft/WSL#9025 のような報告もあるようです。

ところで、先のコマンドで SUBSHELLBASH_SUBSHELL の誤りだったので、余分なお手数をおかけしてすみませんが以下のコマンドを追加で確認していただければ幸いです。

$ (echo "$BASH_SUBSHELL")

また、実際にシェル関数 ble/util/assign の振る舞いを確認しておきたいと考えています。ble.sh のセッションの中で以下を実行して結果を見ていただくことは可能でしょうか (セッション自体が開始できない場合は前述の --inputrc=none でも試していただければ幸いです)。

$ ble/util/assign a 'ble/util/assign b "echo c"'; declare -p a b

(また,.bashrc 12行目 で --inputrc=none を追加して新しいシェルにログインしたところ,プロンプトにRR1R5R9R2R6RRRR2R6RRRR2Rという文字列が入力された状態でシェルが開始されることを確認しました.参考になるかは分かりませんが...)

もしかするとこれはまた独立な問題かもしれませんね…。この文字列は、端末の文字幅テーブルのバージョンを特定するための ble.sh の問い合わせに対して、端末が返した応答の一部のはずです。しかし本来はこれらの応答は切り分けられてプロンプトに現れることはないはずなので、応答データが何処かで壊れている可能性が考えられます。

端末の構成について確認させていただきたく思います。お使いの端末エミュレータは何でしょうか。どのように WSL に接続されていますか。もし端末マルチプレクサなどをお使いで問題が端末マルチプレクサ使用時に固有のものであれば、その情報もお願い致します。

また、(12行目だけある状態で) 以下のコマンドの結果についても教えていただけると助かります。

$ ble/widget/display-shell-version

@tm99hjkl
Copy link
Author

ご対応ありがとうございます.

ls -la "$_ble_base_run" の結果の中に . および .. の結果がないのは,lsに別のlsライクなコマンドをエイリアシングしていたからでした.紛らわしくてすみません...

一応,GNUのlsでは以下のようになりました:

$ /bin/ls -la "$_ble_base_run"
total 0
drwx------ 2 tm tm    680 May 10 14:49 .
drwx------ 6 tm users 200 May  9 15:12 ..
-rw-r--r-- 1 tm tm      0 May  9 10:19 1089.load
-rw-r--r-- 1 tm tm      0 May  9 10:23 1089.util.assign.tmp.0
-rw-r--r-- 1 tm tm      0 May  9 10:19 1089.util.message
-rw-r--r-- 1 tm tm      0 May  9 10:19 1089.util.message-listening
-rw-r--r-- 1 tm tm      0 May  9 13:18 11390.load
-rw-r--r-- 1 tm tm      0 May 10 14:42 11390.util.assign.tmp.0
-rw-r--r-- 1 tm tm      0 May  9 13:18 11390.util.message
-rw-r--r-- 1 tm tm      0 May  9 13:18 11390.util.message-listening
-rw-r--r-- 1 tm tm      0 May  9 16:23 13544.load
-rw-r--r-- 1 tm tm      0 May  9 16:25 13544.util.assign.tmp.0
-rw-r--r-- 1 tm tm      0 May  9 16:23 13544.util.message
-rw-r--r-- 1 tm tm      0 May  9 16:23 13544.util.message-listening
-rw-r--r-- 1 tm tm      0 May 10 11:40 14640.load
-rw-r--r-- 1 tm tm      0 May 10 14:42 14640.util.assign.tmp.0
-rw-r--r-- 1 tm tm      0 May 10 11:40 14640.util.message
-rw-r--r-- 1 tm tm      0 May 10 11:40 14640.util.message-listening
-rw-r--r-- 1 tm tm      0 May 10 12:39 15175.load
-rw-r--r-- 1 tm tm      0 May 10 12:39 15175.util.assign.tmp.0
-rw-r--r-- 1 tm tm      0 May 10 12:39 15175.util.message
-rw-r--r-- 1 tm tm      0 May 10 12:39 15175.util.message-listening
-rw-r--r-- 1 tm tm      0 May 10 14:19 16278.load
-rw-r--r-- 1 tm tm      0 May 10 14:42 16278.util.assign.tmp.0
-rw-r--r-- 1 tm tm      0 May 10 14:19 16278.util.message
-rw-r--r-- 1 tm tm      0 May 10 14:19 16278.util.message-listening
-rw-r--r-- 1 tm tm      0 May 10 14:42 16594.load
-rw-r--r-- 1 tm tm      0 May 10 14:42 16594.util.assign.tmp.0
-rw-r--r-- 1 tm tm      0 May 10 14:42 16594.util.message
-rw-r--r-- 1 tm tm      0 May 10 14:42 16594.util.message-listening
-rw-r--r-- 1 tm tm      0 May  9 10:25 8699.load
-rw-r--r-- 1 tm tm      0 May 10 14:42 8699.util.assign.tmp.0
-rw-r--r-- 1 tm tm      0 May  9 10:25 8699.util.message
-rw-r--r-- 1 tm tm      0 May  9 10:25 8699.util.message-listening
$ /bin/ls -ld "$_ble_base_run"
drwx------ 2 tm tm 680 May 10 14:49 /mnt/wslg/runtime-dir/blesh

また,(echo "$BASH_SUBSHELL")ble/util/assign a 'ble/util/assign b "echo c"'; declare -p a bも実行してみました:

$ (echo "$BASH_SUBSHELL")
1
$ ble/util/assign a 'ble/util/assign b "echo c"'; declare -p a b
declare -- a=""
declare -- b="c"

また,端末エミュレータはweztermを使っています.が,別の端末エミュレータであるWindowsTerminalでも同じ症状を確認しました.端末マルチプレクサは使用していないです.

ble/widget/display-shell-versionの結果も添付いたします.

$ ble/widget/display-shell-version
GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu) [Ubuntu 22.04.2 LTS]
ble.sh, version 0.4.0-devel4+f4c973b8 (noarch) [git 2.34.1, GNU Make 4.3, GNU Awk 5.1.0, API: 3.0 (GNU MPFR 4.1.0, GNU MP 6.2.1)]
bash-completion, version 2.11 (hash:b42f5d6a7ad6d4921ec73838ba54a96d6bd30936, 77071 bytes) (noarch)
locale: LANG=en_US.UTF-8
terminal: TERM=xterm-256color wcwidth=auto-auto/15.0-2+ri

お手数ですが再度ご確認いただけますと幸いです.
(どうやらble.shがというより,他の問題がありそうな気がしてきました・・・)

@akinomyoga
Copy link
Owner

ありがとうございます。いただいたコマンドの実行結果を見ても特に問題はなさそうです。wezterm および Windows Terminal も試してみましたが何れの問題も手元では再現しないようです。


お手数をおかけしますがデバグトレースを取っていただこうと思います。

  1. 先ず、子 Bash セッションで command not found の問題が再現するか確認していただけますか。
$ bash <-- 端末の中で更に bash を起動する
<-- 問題が再現するか?
$ exit
$ bash -l <-- もし上で問題が再現しなければ -l をつけて試す
<-- 問題が再現するか?
$ exit
  1. .bashrc および .bash_history を待避してください
$ mv .bash_history .bash_history.original
$ mv .bashrc .bashrc.original

(すみません、実は .bash_history については、本来 ble.sh 以外の設定をコメントアウトして試していただく時点でバックアップを取っていただくようにお願いするべきでした。設定をコメントアウトした状態で Bash を起動・終了すると 500 項目で切り捨てられてしまうのでした。)

  1. 新しい .bashrc を以下の内容で作ります
if source ~/.local/share/blesh/ble.sh --norc --attach=none; then
  bleopt debug_xtrace=~/xtrace.txt
  ble-attach
fi
  1. この状態で (step 1 で試していただいたように) bash を起動して問題を再現させます。step 1 で問題が再現できていない時は、作業用の端末画面は開いたまま、別に新しいタブまたは端末を開いて問題を再現させてから閉じ、元の作業用の端末画面に戻ってきていただければ問題ありません。
$ bash # もしくは bash -l
$ exit
  1. ~/xtrace.txt というファイルができていることを確認し、それを圧縮します。
$ cd
$ ls -l xtrace.txt
$ gzip xtrace.txt
$ ls -l xtrace.txt.gz
  1. step 2 で待避したファイルをもとに戻します。
$ mv .bashrc.original .bashrc
$ mv .bash_history.original .bash_history

xtrace.txt.gz を GitHub のコメントに添付していただけるでしょうか。ドラッグ&ドロップで添付できます。また step 1 で問題が再現したどうかの情報についても合わせて教えていただければと思います。


ble/widget/display-shell-versionの結果も添付いたします.

ありがとうございます。

以下のように子 Bash セッションを起動した時に問題が発生するかどうかも教えていただけますか (command not found および RRR... のそれぞれの問題について)。

$ bash --noprofile
terminal: TERM=xterm-256color wcwidth=auto-auto/15.0-2+ri

これを見るに、文字幅情報どころか端末ID取得にも失敗しているみたいです…

@tm99hjkl
Copy link
Author

ご返信ありがとうございます.

先ず、子 Bash セッションで command not found の問題が再現するか確認していただけますか。

これは,やはり子 Bash セッションにおいても問題は発生しました.

念のため,問題の.bashrcではない場合,つまり応急処置で--inputrc=noneを追記した場合での子 Bash セッション起動もしてみました.(こちらの動画も添付いたします.)

Untitled.mp4

また,デバッグトレースを以下に置きます:xtrace.txt.gz


最後に,bash --noprofileの出力結果についてですが,問題のbashrcにおいてはcommand not foundの問題が起き,--inputrc=noneを追記した場合ではRRR...の問題が起きました.

何度もご対応いただいてすみません,ありがとうございます.

@akinomyoga
Copy link
Owner

ありがとうございます。

こちらこそ何度も試していただき恐縮です。申し訳ありませんがまだ何回かいろいろ試していただくことになりそうです。

12行目だけ有効にして起動した状態 (つまり ble-attach しない状態) で以下のコマンドの結果を教えていただけるでしょうか。

$ /usr/local/bin/nawk --version
$ echo __BIND0__ | LC_ALL= LC_CTYPE=C /usr/loca/bin/nawk -v q=\' -v _ble_bash=50116 '/^__BIND0__$/ { next; }'
$ ble/builtin/bind/read-user-settings/.reconstruct | head

@tm99hjkl
Copy link
Author

tm99hjkl commented May 11, 2023

コメントに載せていただいたコマンドの一つ目を実行した際に気づいたのですが,nawkというコマンドがあることを知らずに,nawkという名前の自作コマンドを(最悪なことに)/usr/local/binに置いてしまっていました... orz

申し訳ないのですがnawkの再インストールの方法が分からず,ひとまずln -s /usr/bin/nawk /usr/local/bin/nawkとして,書いていただいたコマンドを実行しました:

$ /usr/local/bin/nawk --version
GNU Awk 5.1.0, API: 3.0 (GNU MPFR 4.1.0, GNU MP 6.2.1)
Copyright (C) 1989, 1991-2020 Free Software Foundation.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/.
$ echo __BIND0__ | LC_ALL= LC_CTYPE=C /usr/local/bin/nawk -v q=\' -v _ble_bash=50116 '/^__BIND0__$/ { next; }'
$ # 出力結果はありませんでした
$ ble/builtin/bind/read-user-settings/.reconstruct | head
bind -m emacs '"\e\e[D": backward-word'
bind -m emacs '"\e[5D": backward-word'
bind -m emacs '"\e[1~": beginning-of-line'
bind -m emacs '"\e[4~": end-of-line'
bind -m emacs '"\e\e[C": forward-word'
bind -m emacs '"\e[5C": forward-word'
bind -m emacs '"\e[2~": quoted-insert'

以上です.よろしくお願いいたします.

@tm99hjkl
Copy link
Author

tm99hjkl commented May 11, 2023

ln -s /usr/bin/nawk /usr/local/bin/nawk として ble.sh を再インストールしたら解決しました...
丁寧にご対応いただいて本当に助かりました,ありがとうございました.
(自分の環境のせいなのに ble.sh のバグ扱いしまってすみませんでした... orz)

@akinomyoga akinomyoga added the External Problem/Bug Problems/Bugs of other projects label May 11, 2023
@akinomyoga
Copy link
Owner

なるほど、そういうことでしたか。納得です。手助けになれたようで幸いです! また何かあればお気軽にご相談ください。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
External Problem/Bug Problems/Bugs of other projects
Projects
None yet
Development

No branches or pull requests

2 participants