web-dev-qa-db-ja.com

切り離された画面で2つのコマンドを実行する

wgetを使用してファイルをダウンロードしようとしていますが、バックグラウンドで切り離された画面の内側で...

私の最初のコマンドは:

wget http://www.example.com/file.Zip -O temp/file.Zip; mv temp/file.Zip downloads/file.Zip;

これは、ダウンロードされたファイルを適切に移動し、バックグラウンドでダウンロードしている間はdownloads/ファイルを処理できなくなります。

次に、それを画面付きのbackgorundで実行する必要があるので、実行してデタッチします。

screen -dm wget http://www.example.com/file.Zip -O temp/file.Zip;

しかし、どうすればmoveコマンドを渡して、最初のコマンドが完了したときに実行されるようにできますか?

編集: DopeGhotiの回答に基づいて引用を試みました:

 screen -dm 'wget http://mirror.leaseweb.com/speedtest/100mb.bin -O 1.bin; mv 1.bin 2.bin'
 cannot identify account 'wget http:'.

この:

 screen 'wget http://mirror.leaseweb.com/speedtest/100mb.bin -O 1.bin; mv 1.bin 2.bin'
 cannot exec 'wget http://mirror[...] no such file or directory

編集:/usr/bin/wget/usr/bin/mvのフルパスを試してみましたが、セッション名が見つからないというメッセージが表示され、-S fooを使用してセッション名を付けました。再開する画面はなく、ファイルはダウンロードされません。

screen -dm -S foo '/usr/bin/wget http://mirror.leaseweb.com/speedtest/100mb.bin -O 1.bin; /usr/bin/mv 1.bin 2.bin'
7
adrianTNT

bash -cを指定すると機能します

screen -dm bash -c 'command1; command2;'

ユーザーmeuhこのソリューションをコメントで提供していただき、ありがとうございます。

8
adrianTNT

screenに送信する一連のコマンド全体を引用符で囲みます。それ以外の場合、最初のセミコロンはそのコマンドを終了し、残りをscreenを呼び出しているシェルに送信します。

screen -dm 'wget http://www.example.com/file.Zip -O temp/file.Zip; mv temp/file.Zip downloads/file.Zip'

ただし、ダウンロードが成功した場合にのみファイルを移動することをお勧めします。

screen -dm 'if wget http://www.example.com/file.Zip -O temp/file.Zip; then mv temp/file.Zip downloads/file.Zip; fi'
2
DopeGhoti