Kubuntu 20.04, bash 5.0.17에서 언젠가는 작동하는 bash 스크립트를 작성하는 데 여러 가지 문제가 있습니다. 이제 bash에서 잘못된 점을 발견했습니다. 예를 들어, "export"라는 키워드 뒤에는 이름이나 문자가 무시되므로 이름이나 -p 옵션이 제공되지 않은 것처럼 목록이 인쇄됩니다.
원인을 찾다가 다음과 같이 dmesg를 호출했습니다.
dmesg -s $((10*1024*1024)) -T | less +G
1986라인을 출력합니다.
일반적으로 내 dmesg 출력은 훨씬 길며 시작 시점과 시작 시점을 보여주는 처음부터 몇 줄을 표시합니다.
그러나 이 dmesg 출력은 다음 줄로 시작합니다.
+++++
[Wed Jan 12 03:07:46 2022] microcode: microcode updated early to revision 0x28, date = 2019-11-12
[Wed Jan 12 03:07:46 2022] Linux version 5.4.0-42-generic (buildd@lgw01-amd64-038) (gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2)) #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 (Ubuntu 5.4.0-42.46-generic 5.4.44)
[Wed Jan 12 03:07:46 2022] Command line: BOOT_IMAGE=/casper/vmlinuz file=/cdrom/preseed/kubuntu.seed maybe-ubiquity persistent splash ---
[Wed Jan 12 03:07:46 2022] KERNEL supported cpus:
[Wed Jan 12 03:07:46 2022] Intel GenuineIntel
[Wed Jan 12 03:07:46 2022] AMD AuthenticAMD
[Wed Jan 12 03:07:46 2022] Hygon HygonGenuine
[Wed Jan 12 03:07:46 2022] Centaur CentaurHauls
[Wed Jan 12 03:07:46 2022] zhaoxin Shanghai
[Wed Jan 12 03:07:46 2022] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'
[Wed Jan 12 03:07:46 2022] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
이 장치에서 ClamAV를 실행했는데 이 장치에서 바이러스가 발견되지 않았습니다.
이 dmesg 출력은 실제로 운영 체제가 계속 실행되는 동안 마이크로코드가 변경되었음을 의미합니까?
내 컴퓨터의 마이크로코드 업그레이드가 실제로 자동으로 작동합니까?
인사말Antandhidh
=====
다음을 추가해야 합니다.
ㅏ)
type -a export yields
export is a shell builtin
비)
4개의 가상 데스크톱이 있습니다. 가상 데스크톱 중 하나에서 터미널 에뮬레이터 "konsole"이 실행 중입니다.
이 콘솔 아래에는 8개의 창이 있고 각 창에는 bash 쉘이 있습니다.
이 bash 쉘 중 8개 모두 동일한 오류를 나타냅니다.
씨)
사용하지 않는 데스크탑에서 명령을 실행하기 위해 ALT-F2를 호출하는 경우에도 쉘에 문제가 있습니다.
디)
GUI 및 "konsole"이 아닌 직접 기본 터미널 tty1..tty4 중 하나를 사용하면 bash 쉘에 오류가 없으며 내 코드는 동일합니다.
export VAR
잘 작동합니다.
이자형)
사용하지 않는 GUI 데스크탑에서 "konsole"을 호출하면 bash가 kubuntu 사용자의 터미널에서 열립니다.
이 bash 쉘에서
export WEx1="111"
오류가 주어지지 않으며,
declare -p WEx1
올바르게 표시하다
declare -x WEx1="111".
그리고
printenv | grep We
올바르게 표시하다
WEx1=111
루트에 대한 하위 쉘을 생성할 때(늘 그렇듯)
sudo su
그리고
export WEx2="222"
사용자 kubuntu의 상위 쉘에서와 같이 모든 것이 정확합니다.
에프)
이제 이 질문은 두 부분으로 나누어져야 한다고 생각합니다.
1.
흠집 없는 bash에서 누군가가 글을 쓴다면
export VAR
VAR="vvv"와 같은 할당이 없으면 VAR은 printenv에 없지만 다른 모든 것은 오류 없이 작동합니다.
이는 정상적인 현상이므로 제가 질문한 이유는 아닙니다.
2.
내 문제의 원인은 다음과 같은 잘못된 동작입니다.
누군가 글을 쓴다면
export abcd \<newline\>
그런 다음 bash는 내보내기와 <newline> 사이의 모든 것을 무시하므로 bash는 목록을 인쇄합니다.
declare -x ...
declare -x ...
등
이름이 지정되지 않거나 키워드 내보내기 후에 -p 옵션이 제공되는 경우 이는 true입니다.
인사말Antandhidh
=====
이 기간 동안 제가 아무런 조치도 취하지 않은 채 두 가지 일이 일어났습니다. 하나는 나빴고, 다른 하나는 좋았습니다.
나쁜 점은 다음과 같습니다.
내 8개의 bash 쉘 중 일부가 크게 실패했습니다. 즉:
USB 드라이브의 디렉터리에 bash 기록 파일을 저장합니다.
/media/WE_MNT_HISTFIL/.bash_history.WE-01
내가 글을 쓸 때
$HISTFILE 에코
결함이 있는 껍질에 대한 답은 다음과 같습니다.
/media/ MNT HISTFIL/root/.bash_history
문자를 공백 3개와 공백 1개로 바꾸세요.
이는 단순한 디스플레이 문제가 아닌 내부 문제입니다.
다양한 검사를 통해 USB 스틱의 디렉터리 이름이 여전히 올바른 것으로 나타났지만 일부 내부 응용 프로그램에서는 해당 이름을 사용할 수 없었습니다.
예를 들어 FCEDIT는 오랫동안 다음과 같이 정의되었습니다.
vim -u /media/WE_MNT_HISTFIL/root/.vimrc
결함이 있는 쉘에서는 더 이상 작동하지 않습니다.
해결책은 다음과 같습니다: 저는 항상 사용자 kubuntu의 첫 번째 레벨 쉘에 사용자 루트에 대한 서브쉘을 가지고 있습니다.
종료하고 이 서브쉘을 종료하고 새 서브쉘을 호출해야 합니다.
그러나 첫 번째 시도에서는 운이 좋지 않았습니다.
좋은 점은 다음과 같습니다.
이제 며칠 전과 비교하면 동일한 이전 "konsole" 아래에서 "Fensterleiste" 탭 중 하나에 마우스를 놓은 다음 마우스 오른쪽 버튼을 클릭하여 상황에 맞는 메뉴를 열고 "Create a 새 창 " "을 클릭하면 첫 번째 및 두 번째 수준 쉘이 정상적으로 작동할 수 있습니다.
그래서 나는 새로운 쉘 세트를 만들고 내역과 모든 작업을 새 쉘로 옮겼습니다.
새 부츠가 필요하지 않아서 다행이에요.
인사말Antandhidh