Linux Mint 21(Ubuntu 22ベース)にアップグレードしましたが、いくつかのマイナーな問題が発生しました。そのうちの1つは次のとおりです。VSコード、端末(gnome-terminal)では実行されません。ls
ニックネーム:
bash: printf: `Y': invalid format character
次のエイリアスを定義しましたが、
# Base `ls` alias contains:
# - escape for it could be defined already
# - use colors when appropriate
# - group directories first
# - date format YYYY-Mmm-DD
alias ls="\ls --color=auto --group-directories-first --time-style=+'%Y-%b-%d'"
私はFocalでこの動作を見つけられませんでした。たぶん今バグを探しているのかもしれません。それともこれは本当にバグですか(私のものであれ、誰でも)?
メモ:
https://www.gnu.org/software/coreutils/manual/html_node/Date-conversion-specifiers.html
$ type -a ls
ls is aliased to `\ls --color=auto --group-directories-first --time-style=+'%Y-%b-%d''
ls is /usr/bin/ls
ls is /bin/ls
両方ターミナルとVSコードから。
printf %q\\n "PS1=$PS1" "PS2=$PS2" "PS3=$PS3" "PS4=$PS4" "PROMPT_COMMAND=$PROMPT_COMMAND"
PS1=\\\[\\e\]0\;\ \\w\ \\a\\\]\\\[\$color_green\\\]\\\$\ \\\[\$color_reset\\\]
PS2=\>\
PS3=
PS4=+\
PROMPT_COMMAND=
VS Codeのみ(ターミナルにはありません):
trap -p DEBUG
trap -- '__vsc_preexec_only "$_"' DEBUG
元のバージョンで再公開された画像:
答え1
Bashはアクティブにして実行する前に現在のコマンドのテキストを処理できます。DEBUG
罠。これは元のデバッグ用ですが、実行中のコマンドテキストにウィンドウのタイトルを設定するためによく使用されます。
これextdebug
バッシュオプショントラップの動作方法を調整しましたDEBUG
。これに対する1つの効果は、トラップコードがDEBUG
ゼロ以外の状態を返した場合にコマンドが実行されないことです。
VSCodeの設定はDEBUG
トラップを設定します(trap -p DEBUG
設定されている場合はコードを表示)。これは、実行中のコマンドのテキストでウィンドウのタイトルを設定する可能性が高いです。このコードにはバグがあり、printf
特定の形式でコマンドを渡そうとするようです。コマンドにバックスラッシュまたはパーセント記号が含まれている場合は中断されます。オプションは明らかに有効になっているのでextdebug
(理由はわかりません)、次のコマンドは実行されません。
回避策は、バグのあるコードを修正したり、トラップの設定を解除したりtrap - DEBUG
()トラップをtrap 'other, non-buggy code' DEBUG
バグのない別のコードで上書きすることです。
__vsc_preexec_only
これは、この関数またはその関数が呼び出す他の関数のエラーです。おそらくこれはVSCodeのバグです。 Stéphane Chazelasが指摘したように、このバグが報告されました。(この記事を書く時点には修正がありますが、修正にはまだバグがあり、コードマネージャが自分が何をしているのか理解していないようです)。