Bash 通过脚本运行进程时,jobs命令结果为空

Bash 通过脚本运行进程时,jobs命令结果为空,bash,shell,scripting,jobs,Bash,Shell,Scripting,Jobs,我需要通过shell脚本在后台运行rsync,但一旦它启动,我需要通过shell监控作业的状态 作业命令在脚本退出后在shell中运行时返回空ps-ef | grep rsync显示rsync仍在运行 我可以通过脚本检查状态,但我需要多次运行脚本,以便它使用不同的ip.txt文件来推送。因此,我无法运行脚本来检查作业的状态 以下是脚本: for i in `cat $ip.txt`; do rsync -avzh $directory/ user@"$i":/cygdrive/c/te

我需要通过shell脚本在后台运行rsync,但一旦它启动,我需要通过shell监控作业的状态

作业
命令在脚本退出后在shell中运行时返回空
ps-ef | grep rsync
显示rsync仍在运行

我可以通过脚本检查状态,但我需要多次运行脚本,以便它使用不同的
ip.txt
文件来推送。因此,我无法运行脚本来检查作业的状态

以下是脚本:

for i in `cat $ip.txt`; do
     rsync -avzh $directory/ user@"$i":/cygdrive/c/test/$directory 2>&1 > /dev/null &
done
jobs; #shows the jobs status while in the shell script.
exit 1
shell脚本退出后,
作业
命令的输出为空:

root@host001:~# jobs
root@host001:~# 

原因是什么?当
rsync
在后台运行时,如何获取
jobs
的状态?我在网上找不到与此相关的文章。

因为您的shell(执行
作业的shell)没有启动
rsync
,所以它对它一无所知。解决这个问题有不同的方法,但归根结底是从shell开始后台进程。例如,您可以使用
source
BASH命令启动脚本,而不是在单独的进程中执行它。当然,您必须在最后删除
退出1
,否则将退出shell。

您能给我一个源代码命令的示例吗?我尝试了
源rsync-avzh abcduser@host001:/cygwin/c/abcd
但它会抛出以下错误
源:/usr/bin/rsync:无法执行二进制文件
。它像
源代码/script.sh
?不能像
source rsync-avzh…
那样使用它吗?从脚本中删除
exit 1
,然后通过执行
source myscript
或更短的
来运行它。myscript
(这是一个点)。在shell中键入
帮助源代码。