从root运行脚本时,变量不存储值(unix)

时间:2013-05-13 21:28:20

标签: linux bash shell unix scripting

通过root运行此脚本时,输出变量不存储“pbrun tsm_support.ksh -c $ i”命令的值。

 #!/bin/bash
set -x

for i in `cat /home/unixlist.txt`

do
output=$(pbrun tsm_support.ksh -c $i)
echo $output >> /home/file.txt
if echo "$output" | grep -i "OPTION01"  ;
then
echo successfull-- $i===$output 

当我从本地用户ID运行此脚本时,它运行完美文件并打印输出

Error-- DBSSS0006=== Starting checkfix script.....DBSSS0006:B:SunOS:1:1:2:0:Z
Error-- DBSSS0005=== Starting checkfix script.....DBSSS0005:B:SunOS:1:1:2:0:Z

但是当我从root运行这个脚本时,它不会取输出变量的值。它没有取得$ output的价值。

  Error-- DBSSS0006===
  Error-- DBSSS0005===

我没有root权限,我只能编辑crontab文件并将我的条目放在那里。

2 个答案:

答案 0 :(得分:1)

问题是crontab中设置的环境变量与命令行中设置的环境变量。 它们不一样。

要了解您需要更改的内容: 把它放在你的crontab中:

* * * * * set > /tmp/crontab.txt

保存,等待2 -3 minuite运行,然后删除crontab更改。

下一步:

set > /tmp/myenv.txt
diff /tmp/myenv.txt /tmp/crontab.txt

会告诉你差异。对您的crontab脚本进行一些更改,使其(可能)具有您需要的PATH变量和LD_LIBRARY_PATH变量。您不必更改每个环境变量。

答案 1 :(得分:0)

您的问题是假设在批处理模式下访问powerbroker时具有相同的环境变量,因为它来自交互式终端模式。

即使在没有看到实际的tsm_support.ksh脚本内容的情况下也不可能说出存在什么缺陷,我敢打赌,在LD_LIBRARY_PATH中做出的假设在任何地方和每次都是相同的。

尝试编辑脚本并放置行

LD_LIBRARY_PATH=/wherever/it/needs/to/point/to

在做任何其他事情之前。当然,如果这是你唯一的问题,这是有效的。我过去曾与powerbroker合作过2年。它并不像人们对这种产品所期望的那样微不足道。如有疑问,请联系Beyond Trust(前身为Symark)技术支持。由于您要授权产品,因此您必须有权获得技术支持。他们可以告诉你你到底错过了什么。