端末を開く必要がない「スクリプト」に似たものはありますか?
私のプログラムの結果をファイルに保存したいのですが、いくつかの問題があります。リモートで作業する必要がありますが、インターネット接続が悪いです。だから私は通常次を実行します。
./MyProgram.exe > output.txt &
私のプログラムの結果はoutput.txtファイルに保存されます。
ただし、特定のオブジェクトでプログラムを実行すると、「SIGSEGV:Segmentation Fault」エラーが発生します。プログラムが終了しました。大丈夫です。そうなるとわかりました。しかし、プログラムがエラーを引き起こした問題のあるオブジェクトに遭遇する前に、以前のオブジェクトのすべてのデータが失われました。
すべて(問題オブジェクトのない結果とこのエラーを含む)をファイルに書き込むにはどうすればよいですか?
私は試した:
./MyProgram.exe > output.txt 2>&1 &
./MyProgram.exe > output.txt 2> error.txt &
./MyProgram.exe > & error-n-output.txt &
しかし、上記のすべては、プログラムが古いオブジェクトで動作することを知っているにもかかわらず、古いオブジェクトの結果ではなく分割エラーのみを記録します。
script
また、次のコマンドを入力してみました。
私の名前@コンピュータ〜/フォルダ$script screen.log
スクリプトが開始され、ファイルは screen.log です。
私の名前@コンピュータ〜/フォルダ$./MyProgram.exe
~~結果と分割エラーが画面に印刷されるため、特定のオブジェクトの結果を記録し、エラーを無視できます~~
私の名前@コンピュータ〜/フォルダ$終了
終了
スクリプトが完了し、ファイルは screen.log です。
画面の内容はすべて screen.log ファイルに書き込まれます。大丈夫かもしれませんが、インターネット接続が良くないため、長時間画面を実行できません。ターミナルを終了する必要がありますが、もちろんプログラムは終了し、「screen.log」ファイルには何も記録されません。
script
端末を開く必要がない同様のものがありますか?
ベストアンサー1
nohup
たぶんそれはあなたが望むものかもしれません。nohup
目的は、「コマンドを実行して破棄信号を無視すること」です。つまり、何らかの理由で(もちろん、ホストの競合、シャットダウン、または再起動を除く)、シリアル接続などの接続が失われても、プログラムは引き続き実行されますssh
。telnet
すべての出力がファイルにリダイレクトされるため、バックnohup
グラウンドで(を使用して)-edコマンドを実行することもできます。&
たとえば、
nohup MyProgram.exe &
デフォルトでは、出力はまたは./nohup.out
に保存されますが、~/nohup.out
必要に応じて他のファイルにリダイレクトできます。マニュアルページから:
標準入力が端末の場合は、読み取れないファイルにリダイレクトします。標準出力が端末の場合は
nohup.out
可能であれば出力を追加し、$HOME/nohup.out
それ以外の場合は出力を追加してください。標準エラーが端末の場合は標準出力にリダイレクトします。出力をFILEに保存するにはnohup COMMAND > FILE
。
nohup
ユーザー入力を必要としない非対話型プログラムに最適です。
ユーザーと直接対話するプログラム(ncurses
アプリケーションなど)を実行する必要がある場合は、GNUなどのターミナルマルチプレクサを使用してください。画面またはマルチプレクサまたは画面または代わりに同様のものnohup
。
ターミナルマルチプレクサは、プログラムが中断信号の影響を受けないようにするだけでなく、切断後に再度ログインしたときに同じシェルセッション(および実行中のプログラム)に再接続できるようにします。単一の接続を介して複数のシェルセッションを有効にすることもできます(たとえば、sshを介してリモートシステムに接続して実行すると、screen
必要に応じて必要な数のシェル「ウィンドウ」を作成、削除、および切り替えることができます)。
ちなみに、これらのプログラムはすべて標準シェルを提供するので、script
その中で実行することを選択できます。
このプログラムのホームページにリンクしましたが、インストール用にコンパイルする必要はありません。ほとんどの(すべて?)Linuxディストリビューション、FreeBSD、Mac OS X、Solarisなど。