我正在尝试下载一个文件,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'