Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 无法通过调用其他脚本来执行脚本_Linux_Bash_Shell - Fatal编程技术网

Linux 无法通过调用其他脚本来执行脚本

Linux 无法通过调用其他脚本来执行脚本,linux,bash,shell,Linux,Bash,Shell,对于两个不同的用户“a”和用户“root”,我有两个shell脚本: a.sh用于用户“a” export CODE=`pwd | cut -d / -f 5` isEnabled=`grep -i isEnabled $HOME/$CODE/config/code.properties | awk -F'=' '{print $2}'` b.sh用于用户“根用户” su - a -c "sh /export/home/a/a1/bin/a.sh status 如您所见,root用户执行脚本

对于两个不同的用户“a”和用户“root”,我有两个shell脚本:

a.sh用于用户“a

export CODE=`pwd | cut -d / -f 5`
isEnabled=`grep -i isEnabled $HOME/$CODE/config/code.properties | awk -F'=' '{print $2}'`
b.sh用于用户“根用户”

su - a -c "sh /export/home/a/a1/bin/a.sh status
如您所见,root用户执行脚本b.sh,后者执行脚本a.sh 但实际上它失败了,因为它没有找到脚本的路径,因为 运行b.sh时,a.sh中的变量$CODE可能在运行时丢失

经过调查后,我在b.sh中厌倦了以下内容:

. /path/to/a.sh
source /path/to/a.sh
. /path/to/a.sh "$CODE"
. $(/path/to/a.sh $CODE)
有人能给点建议吗


谢谢大家。

变量
$code
应该在那里,但它将被设置为a的主目录。尝试使用
basename$0
而不是
pwd
。这将获取执行脚本的目录,而不是执行脚本的用户的当前工作目录。

su-a
完成时,当前目录将设置为用户
a
的主目录。我认为这会使你在
a.sh
中的逻辑偏离。为什么需要依赖当前目录?
code.properties
的路径能否以更好的方式派生?当用户执行a.sh时,它工作得非常好。但当我以root用户的身份执行它时,它会抛出一个错误,因为root用户缺少$CODE,我不确定我是否理解您的意思。你能给我一个建议吗example@Asfbar尝试将代码中的这一行更改为:
export-code='pwd | cut-d/-f5'
'export-code='basename$0 | cut-d/-f5'
(假设单引号是反勾,我无法理解注释中如何解释标记)。这将获得a.sh所在的目录,而不是用户的主目录。如果使用pwd,则cut命令将不会返回任何内容,因为用户的主目录可能没有那么长的路径。@Asfbar此外,您可能希望使用
cut-d/-f4
而不是
cut-d/-f5
。它将返回用户主目录的子目录的名称。