fix: stdin TTY 偵測改以 fd 0 實際裝置判定,escript 真終端機不再誤判(issue #19)
- 新增 BearCli.TTY:readlink /proc/self/fd/0 判定 pts/tty/console/ptmx; 無 /proc 平台退回 :io.rows/0 - vault/self_service 的 tty_stdin?、accounts 的 tty? 改用 TTY.stdin_tty? - 根因::io.rows/0/:io.columns/0 走 io 協定問 group leader,escript (noshell standard_io)不支援行列查詢,一律回 enotsup——真終端機被 誤判成非 TTY,互動指令(vault unlock 等)無法讀 stdin 密碼 (bear #52 驗收建議 2) - 非 TTY(pipe/redirect)行為不變:明確提示+退出碼 2 - 新增 tty_test(4 測試);mix precommit 全綠(200 passed)
This commit is contained in:
@@ -15,7 +15,7 @@ defmodule BearCli.SelfService do
|
||||
3 未登入或 401;6 網路/伺服器錯誤;8 權限不足(403)。
|
||||
"""
|
||||
|
||||
alias BearCli.{Api, Config, Credentials}
|
||||
alias BearCli.{Api, Config, Credentials, TTY}
|
||||
|
||||
@genders ~w(male female other)
|
||||
|
||||
@@ -551,9 +551,10 @@ defmodule BearCli.SelfService do
|
||||
end
|
||||
end
|
||||
|
||||
# :io.rows/0 僅在終端機裝置成功;pipe/檔案重導回 {:error, :enotsup}。
|
||||
# stdin 是否為 TTY:優先以 fd 0 實際裝置判定(escript 環境 :io.rows/0 一律
|
||||
# enotsup,真終端機會被誤判;見 BearCli.TTY,issue #19)。
|
||||
defp tty_stdin? do
|
||||
match?({:ok, _}, :io.rows())
|
||||
TTY.stdin_tty?()
|
||||
end
|
||||
|
||||
# -- 輸出 --
|
||||
|
||||
Reference in New Issue
Block a user