GNU并行更改PATH环境变量

Ome*_*gan 1 parallel-processing gnu environment-variables gnu-parallel

我正在尝试使用GNU Parallel来在远程计算机上运行带有多个参数的脚本.这看起来有点像:

parallel --onall -S remote-machine  /shared/location/script.sh ::: param_a param_b
Run Code Online (Sandbox Code Playgroud)

/shared/location/script.sh正在使用git.所以我得到这个错误:

git: command not found
Run Code Online (Sandbox Code Playgroud)

如果我登录remote-machine手动和运行/shared/location/script.sh使用param_aparam_b一切工作正常.所以我检查了$ PATH变量并发现如果我remote-machine使用GNU parallel 运行一些东西,它看起来像PATH=/usr/bin:/bin:/usr/sbin:/sbin.如果我直接从机器上运行它也是/local/bin/git.

为什么会这样,如何克服?

提前致谢

Ole*_*nge 7

GNU Parallel使用ssh进行远程执行,因此$ PATH与运行非交互式ssh会话时看到的相同:

ssh server echo '$PATH'
parallel -S server --onall {} '$PATH' ::: echo
Run Code Online (Sandbox Code Playgroud)

您在登录时看到不同的$ PATH的原因是交互式会话可能设置另一个$ PATH.

您可以parallel使用--env 强制复制环境变量:

parallel --env PATH -S server --onall {} '$PATH' ::: echo
Run Code Online (Sandbox Code Playgroud)