当我进入服务器时,我可以看到PATH变量已根据需要设置,并且需要添加一些自定义文件夹。
当我尝试使用Java中的com.jcraft.jsch.JSch库连接到同一服务器时,PATH将设置为其他内容。
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
这似乎是开箱即用的值,并且不包含所需的自定义文件夹。除非我提供可执行文件的完整路径,否则当我通过Java连接时,我不需要工作的任何命令。我需要连接到不同的服务器,并且可能在不同的位置设置可执行文件,因此这不是一个选项。
我希望有人可以帮我弄清楚当我使用Java连接时./bashrc文件无法运行的原因。我应该手动运行吗?
提前致谢。
答案 0 :(得分:0)
使用命令行SSH连接时,您的"默认命令"是您在远程计算机上为您的用户名设置的shell(可能是bash
,您可以使用chsh
更改),然后bash
导入您的.bashrc
文件。
使用JSch进行连接时,您打开的Channel
类型将确定您的连接将执行的操作。根据我对JSch如何工作的理解,可能是JSch在打开SSH会话时没有打开bash
。
作为一般经验法则,如果SSH守护程序配置为允许,请尝试使用~/.ssh/environment
设置PATH
而不是.bashrc
。这将始终在SSH运行任何命令(包括shell)之前导入,因此设置PATH
时更可靠。
可以在this Unix StackExchange post中找到有关.bashrc
,PATH
和SSH的更多信息,包括我的答案的一些替代方案。