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つの仮想デスクトップがあります。仮想デスクトップの1つでターミナルエミュレータ「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の親シェルのように、すべてが正しいです。
F)
今、この質問は2つの部分に分けられるべきだと思います。
1.
傷のない bash で誰かが書くなら
export VAR
VAR = "vvv"などの割り当てがない場合、VARはprintenvにはありませんが、他のすべてはエラーなしで動作します。
これは正常な現象なので、私が質問した理由ではありません。
2.
私の問題の原因は、次のような誤動作です。
誰かが書くなら
export abcd \<newline\>
その後、bashはエクスポートと<newline>の間のすべてを無視するので、bashはリストを印刷します。
declare -x ...
declare -x ...
など
名前が指定されていない場合、またはキーワードのエクスポート後に-pオプションが指定されている場合はtrueです。
挨拶Antandhidh
=====
この間、私は何もしなかったまま、2つのことが起こりました。一つは悪かった、もう一つは良かった。
悪い点は次のとおりです。
私の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」タブの1つにマウスを置き、右クリックしてコンテキストメニューを開き、「Create a New Window」をクリックすると、最初と2番目レベルシェルが正常に動作する可能性があります。
だから私は新しいシェルセットを作成し、履歴とすべてのタスクを新しいシェルに移動しました。
新しいブーツが必要なくて幸いです。
挨拶Antandhidh