ls: bash: printf: `Y': 端末ではなく VS Code の形式文字が正しくありません。

ls: bash: printf: `Y': 端末ではなく VS Code の形式文字が正しくありません。

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が指摘したように、このバグが報告されました。(この記事を書く時点には修正がありますが、修正にはまだバグがあり、コードマネージャが自分が何をしているのか理解していないようです)。

おすすめ記事