sudo su dkay
私の例では、...と入力し始め<tab>
、コマンドが約1分間停止し、タブを押して完了しますsudo su dkayton
。
誰かが何が起こっているのかを理解するためにstraceを使用するように提案しました。
タブを完成させるための基本コマンドをstraceに渡す方法についてのアイデアはありますか?
私が試したこと:
top
プロセスを監視するためにシェルで実行されています。その後、すぐにsudo su dkay
別のシェルでTabキーを押しました。
次に、できるだけ早くbashプロセスのPIDをコピーし、sudo strace -pXXX -tfo /tmp/strace.log
3番目のシェルを作成しました。ここで、XXXはコピーされたPIDです。
それでも2MBを超えるログをキャプチャしています。私はそれを2回繰り返し、2番目はより成功しました。
私はこれを行うより自動的な方法を探しています。
答え1
(Linuxを使用していると仮定)echo $$
現在のシェルのPIDを取得します。新しい端末を開き、次を実行します。
sudo strace -fp <PID> -o log
以前のシェルに戻ってタブを完成させてください。その後、新しい端末に切り替えてCtrlC終了を押しますstrace
。出力は、同じシェルでコマンドを実行するlog
こともできます(まず、資格情報をキャッシュするように認証)。strace
sudo
sudo -v
sudo strace -fp $$ -o log &
それからタブを完成させてください。それを殺すには、fg
その後CtrlC。
しかし、bashを使用している場合は、まずbashから詳細なデバッグ出力を取得するのが最善です。
set -o functrace xtrace
PS4=' ${BASH_SOURCE}:$FUNCNAME:$LINENO: '
それからタブを完成させてください。後続の出力で完成関数が実行するすべての操作を実行する必要があります。たとえば、
bash-5.0$ set -o xtrace functrace
bash-5.0$ PS4=' ${BASH_SOURCE}:${FUNCNAME}:$LINENO: '
+ PS4=' ${BASH_SOURCE}:${FUNCNAME}:$LINENO: '
bash-5.0$ sudo su /usr/local/share/bash-completion/bash_completion:_completion_loader:3: local cmd=sudo
/usr/local/share/bash-completion/bash_completion:_completion_loader:5: __load_completion sudo
/usr/local/share/bash-completion/bash_completion:__load_completion:2: dirs=(${BASH_COMPLETION_USER_DIR:-${XDG_DATA_HOME:-$HOME/.local/share}/bash-completion}/completions)
/usr/local/share/bash-completion/bash_completion:__load_completion:2: local -a dirs
/usr/local/share/bash-completion/bash_completion:__load_completion:3: local 'OIFS=
' IFS=: dir cmd=sudo compfile
/usr/local/share/bash-completion/bash_completion:__load_completion:2021: for dir in ${XDG_DATA_DIRS:-/usr/local/share:/usr/share}
/usr/local/share/bash-completion/bash_completion:__load_completion:5: dirs+=($dir/bash-completion/completions)
/usr/local/share/bash-completion/bash_completion:__load_completion:2021: for dir in ${XDG_DATA_DIRS:-/usr/local/share:/usr/share}
/usr/local/share/bash-completion/bash_completion:__load_completion:5: dirs+=($dir/bash-completion/completions)
/usr/local/share/bash-completion/bash_completion:__load_completion:7: IFS='
'
/usr/local/share/bash-completion/bash_completion:__load_completion:9: [[ /usr/local/share/bash-completion/bash_completion == */* ]]