在分离的屏幕中运行两个命令

在分离的屏幕中运行两个命令

我正在尝试下载一个文件,wget但在后台和分离的屏幕内......

我最初的命令是:

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

这将很好地移动下载后的文件,防止我downloads/在文件仍在后台下载时处理它们。

现在我需要在带有屏幕的背景中运行它,所以我运行并分离它:

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

但是我怎样才能仍然传递移动命令并使其在第一个命令完成时运行?

编辑:我尝试根据 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'

答案1

如果我指定它就有效bash-c

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

用户在评论中提供了这个解决方案,谢谢。

答案2

将您要发送到的整个命令序列放在screen引号中;否则第一个分号结束该命令并将其余部分发送到您正在调用的 shell 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'

相关内容