我在服务器 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 中抛出未定义变量错误。
change-environment.sh 在 c shell 中运行(我无法控制脚本,因此我使用的方法是我能使用的唯一方法),但其他一切都在 bash 中。
发现类似的问题 我可以在本地运行脚本,但无法执行“ssh HOSTNAME /path/to/script.sh”但该问题至今未有解决,已持续一年。
答案1
当使用 ssh 和命令时,即使您的脚本使用了,它也可能不会真正创建登录 shell #!/bin/bash -l
。
尝试ssh user@server-A bash -l
,然后运行脚本。您还可以创建类似
#!/bin/bash
export
然后在手动登录后(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 则会设置。
另一个重要的区别是,只有在交互运行时(无需命令登录)才会分配伪终端。
答案2
您的脚本可能需要一个终端 (tty)。您只需运行 ssh 并强制使用伪终端,它就可以正常运行。
远程控制-ttremote_host“你的脚本”
答案3
您确实需要比较您的环境,.profile 可帮助您使它们保持一致。为什么不检查一下您的代码,看看它依赖于哪些环境变量?然后您可以在脚本 A 中修复这些环境变量。顺便说一句,我还建议您在调试时像这样调用 bash 脚本:
bash -v
(详细)