Linux Mint 21(Ubuntu 22 기반)로 업그레이드했는데 몇 가지 사소한 문제가 발생했는데 그 중 하나는 다음과 같습니다.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 Code에서.
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
. 이에 대한 한 가지 효과는 트랩 코드가 DEBUG
0이 아닌 상태를 반환하는 경우 명령이 실행되지 않는다는 것입니다.
VSCode의 구성은 DEBUG
트랩을 설정합니다( trap -p DEBUG
설정된 경우 코드 표시). 이는 실행 중인 명령의 텍스트로 창 제목을 설정할 가능성이 높습니다. 이 코드에는 버그가 있어 printf
특정 형식으로 명령을 전달하려고 시도하는 것 같습니다. 명령에 백슬래시 또는 백분율 기호가 포함되어 있으면 중단됩니다. 옵션이 분명히 활성화되어 있기 때문에 extdebug
(이유는 모르겠습니다) 다음 명령은 실행되지 않습니다.
해결 방법은 버그가 있는 코드를 수정하거나 트랩 설정을 해제 trap - DEBUG
하거나( ) 트랩을 trap 'other, non-buggy code' DEBUG
버그가 없는 다른 코드로 덮어쓰는 것입니다.
__vsc_preexec_only
이는 이 함수 또는 해당 함수가 호출하는 다른 함수의 오류입니다. 아마도 이것은 VSCode의 버그일 것입니다. Stéphane Chazelas가 지적했듯이,이 버그가 보고되었습니다.(이 글을 쓰는 시점에는 수정 사항이 있지만 수정 사항은 여전히 버그가 있으며 코드 관리자가 자신이 수행하는 작업을 이해하지 못하는 것 같습니다.)