バックグラウンドで実行されているプロセスによって端末が破損する可能性があります

バックグラウンドで実行されているプロセスによって端末が破損する可能性があります

私はこれを持っていますmakefile

all: 
        sudo watch "ls -l" > /dev/null &
        @echo line 1
        @echo line 2
        @echo line 3
        @echo line 4

ランニングwatchまたは何とか端末を変更する他のプロセス) 端子が破損しています。これが出力です。このように広いスペースを見ることができます。また、次の文章を書くと文字が見えません。

me@me:/tmp$ make
watch "ls -l" > /dev/null &
line 1
line 2
      line 3
            line 4
                  me@me:/tmp$ 

プロセスが端末を変更するのを防ぐ方法はありますか?
言うwatch1つだけ再現可能な例。デーモンとして実行する必要がある他のアプリケーションを使用していますが、それでも端末がハングします。


編集:このアプリケーションを実行します(この例ではアプリケーションはwatch)。sudo
解決策なしで始めることです。sudoこれにより端末は破壊されません。
これの欠点は、chownこのプロセスが必要ないことですroot:root

ベストアンサー1

時計はデザイン的に端末を更新しました。オブジェクトを「監視」し、オブジェクトの現在のバージョン(または-dを使用してオブジェクトに対する変更)を表示します。ウォッチが役に立つ例は、CPU温度を監視したい場合に新しいターミナルを開き、次のコマンドを実行すると、出力がセンサーによって記録された温度で2秒ごとに更新されることです。

watch -x cat /sys/devices/pci0000:00/0000:00:18.3/hwmon/hwmon0/temp1_input

なぜ「ls -l」を見たいのか分かりません。出力を記録するシェルスクリプトを作成できますか?

#!/bin/bash

while :
do 
   date +"%H:%M:%S" >> /var/log/ls.log
   ls -l >> /var/log/ls.log   
   sleep 2
done

新しいファイルまたは変更されたファイルを記録するには、次の手順を実行します。

 #!/bin/bash
    
    while :
    do 
       find -newer /var/log/ls.log >> /var/log/ls.log
       date +"%H:%M:%S" >> /var/log/ls.log  
       sleep 2
    done

睡眠時間を増やしたいかもしれません。時計のデフォルト設定なので、私は2に設定しました。

出力がインデントされていて、出力後に入力した文字が表示されない理由は、Bashではなく端末によるものです。

ターミナルプログラムの設定を確認し、用語タイプがエンコードと一致していることを確認してください(例:utf8、ANSIIなど)。ターミナルはカーソルを行の先頭(\ r)にリセットするのではなく、カーソルを1行下(\ n)だけ移動します。これは、ファイルがWindowsで作成されてからLinuxに移動された場合、またはファイルがLinuxで作成されてWindowsに移動された場合にも発生する可能性があります。

入力した文字は、出力の最後の行の後に表示されます。だからあなたはそれを見ることができません。

おすすめ記事