我有一个服务器上的脚本-A
脚本-A
#!/bin/bash -l echo "script-A.sh" | change-environment.sh
当我ssh到服务器-A并执行它,它工作正常。 但是,当我
ssh user@server-A ./script-A.sh
Script-A执行,但在change-environment.sh中引发一个未定义的variables错误。
change-environment.sh在c shell中运行(我无法控制脚本,所以我使用的方法是唯一的方法,我可以使用它),但其他一切都在bash中。
发现了一个类似的问题, 我可以在本地运行脚本,但不能做“ssh HOSTNAME /path/to/script.sh” 。 但是这个问题还没有解决,已经一岁了。
当通过命令使用ssh时,即使脚本使用#!/bin/bash -l实际上也可能不会创buildloginshell。
试一下ssh user@server-A bash -l ,然后运行你的脚本。 你也可以创build类似的东西
#!/bin/bash export
然后在手动login( ssh user@server-A )并使用ssh和命令( ssh user@server-A name-of-that-script.sh )之后运行它。
例如,在Mac OS X上,使用ssh martin@nathan bash -l甚至没有设置PS1 ,而正常的ssh martin@nathan交互式shell却没有。
另一个重要的区别是,只有在交互式运行(没有命令login)时才会分配伪terminal。
你真的需要比较你的环境,.profile可以帮助你保持一致。 你为什么不走过你的代码,看看它依赖于哪个环境variables? 然后你可以在你的脚本-A中修复这些环境variables。 顺便说一下,我也build议你在debugging时调用这样的bash脚本:
bash -v
(详细)