多くのPythonスクリプトを実行して出力を保存したいと思います。なぜなら、端末で1つずつ実行するのは面倒すぎるからです。提案に従ってシェルスクリプト(.sh)を使用することにしました。
問題を単純化するために実行したい2つのPythonスクリプト(print1.py
および)があるとしますprint2.py
。スクリプトprint1.py
出力番号は 1、スクリプトprint2.py
出力番号は 2 です。
シェルスクリプトを使用せずに(つまり、コマンドを個別に入力するなど)、目的の結果を得ることができます。
シェルスクリプトを使用しない場合、私が使用するコマンドは次のとおりです。
$ nohup python print1.py &> 1.txt &
$ nohup python print2.py &> 2.txt &
1.txt
それぞれとに出力をリダイレクトします2.txt
。したがって、1.txt
数字1が含まれ、2.txt
数字2が含まれます。これら2つのコマンドを端末に別々に入力すると、正常に動作します。これが私が望むものです。
シェル scipt を使用すると、必要なものを取得できません(リダイレクトが機能していないようです)。
ただし、シェルスクリプトを使用すると、次のようになりますcommand.sh
。
#! /bin/sh
nohup python print1.py &> 1.txt &
nohup python print2.py &> 2.txt &
私は入る
$ sh command.sh
ランニングcommand.sh
。出力は私が期待していたものとは異なります。生成され1.txt
ますが、2.txt
何も含めません。nohup.out
数字1と2を含むファイルも作成されます。
端末に表示される出力は次のとおりです。
$ nohup: appending output to 'nohup.out'
nohup: appending output to 'nohup.out'
この回答プロンプトは同じです#! /bin/sh
。一部のシェルではこれを理解できない場合があります&>
。それで私も#! /bin/sh
に変えてみましたが#! /bin/bash
… ところで同じですね。
コマンドだけを入力するのと同じ結果を得るためにシェルスクリプトを使用できますか?
答え1
明示的に指定すると、行sh command.sh
にsh
関係なくスクリプトを実行するために使用されます#!
。しかし、接続された回答からわかるように、演算子をそれ自体がsh
理解できずに読み取ることです。&>
nohup python print1.py &> 1.txt &
2つのコマンドで:
nohup python print1.py &
> 1.txt &
1つ目は出力をprint1.py
記録しnohup.out
、2つ目は空の出力を作成します1.txt
。
あなたがあなたのものをbash
実行したくない場合は使用できますsh
command.sh
bash command.sh
または、#!/bin/bash
ファイルを挿入して#!/bin/sh
実行可能にしてから、単に実行してください。
./command.sh
それ自体。