Unix环境变量未设置为远程执行

时间:2014-06-21 02:29:59

标签: linux shell unix putty plink

我有shell脚本调用test.sh,它包含

echo 'welcome'
echo $inf_user

当我在unix框输出上运行此脚本时

  

欢迎

     

名为myUsername

但是当我使用plink运行这个脚本时,我的输出是

  

欢迎

正如您所见,它只显示欢迎,并且不再显示myusername

请帮忙

我的plink命令是 - plink.exe -ssh user@hostname -l user -pw password -m c:/myfile/file.txt hostname

和 file.txt包含

#!/bin/sh
/folder1/folder2/test.sh

2 个答案:

答案 0 :(得分:1)

问题在于,当您实际登录服务器时,还会加载环境变量,例如$inf_user。但是当plink.exe连接时,我猜测它并没有启动真正的SSH会话来加载用户配置文件&相关的环境变量。

如何解决这个问题取决于设置&安装要求。不熟悉如何设置$inf_user,但也许你可以这样做;我使用我当地的Mac OS X设置作为示例。首先登录远程Unix / Linux服务器并输入以下内容:

echo $PATH;

输出应该是这样的:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

现在,在远程主机上的脚本中,根据该输出将此行添加到文件顶部:

PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

这会强制脚本将PATH用作$PATH

此外,由于$inf_user不是标准的Unix / Linux变量,因此可以在远程系统的.bashrc.profile中进行设置。因此,您可能需要在此处查看是否存在可以复制的变量。

过去所有这些,我对plink.exe的工作方式并不是100%肯定,但file.txt可能更适合bash这样设置:

#!/bin/bash
/folder1/folder2/test.sh

我有一种有趣的感觉,当你登录时,你正在使用bash shell,但是这个脚本正在使用基本的sh shell,而这也可能导致这个问题。

答案 1 :(得分:1)

在大多数UNIX系统上,变量$USER可用于访问当前登录用户的用户名。变量$inf_user特定于您碰巧拥有的任何设置。

另外,在一个不相关的说明中,我看到您在命令中指定了密码。您通常不应该这样做,因为命令在命令历史记录中未加密记录,并且可以在机器上运行ps的任何人都可以看到。我建议您运行一个不包含密码的命令,但允许通过标准输入输入密码。