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
Bash脚本从命令行成功运行,但在程序调用时不运行_Bash_File Permissions - Fatal编程技术网

Bash脚本从命令行成功运行,但在程序调用时不运行

Bash脚本从命令行成功运行,但在程序调用时不运行,bash,file-permissions,Bash,File Permissions,我有一个脚本“postprocessing.sh”。该脚本可用于热工水力模拟软件包(由名为“npo”的父程序调用)数据输出的后处理 支持以下代码在数据文件“MELC.PTF”中查找数据向量“CFVALU_10000202”,将数据向量写入文件“DATA1”,执行一些简单的后处理,最后将结果写入“ext.goal1” 为此,所使用的许多函数(MREAD、write g0.s0、基本上所有写入aptplot1.gr的函数)都是安装在文件树不同部分的绘图工具的一部分。当使用aptplot1.gr作为输

我有一个脚本“postprocessing.sh”。该脚本可用于热工水力模拟软件包(由名为“npo”的父程序调用)数据输出的后处理

支持以下代码在数据文件“MELC.PTF”中查找数据向量“CFVALU_10000202”,将数据向量写入文件“DATA1”,执行一些简单的后处理,最后将结果写入“ext.goal1”

为此,所使用的许多函数(MREAD、write g0.s0、基本上所有写入aptplot1.gr的函数)都是安装在文件树不同部分的绘图工具的一部分。当使用aptplot1.gr作为输入参数调用aptbatch.sh时,我们调用此绘图工具。aptbatch.sh的路径保存在“.bashrc”-文件的路径变量中

当通过键入“/postprocessing.sh”或“bash postprocessing”从bash执行下面的脚本时,它会像预期的那样执行。文件DATA1、aptplot1.gr和ext.goal1在当前工作目录中生成,内容正确

运行“npo”调用“postprocessing.sh”的程序时,会将aptplot1.gr写入文件,但不会生成“DATA1”或“ext.goal1”。程序在试图调用“aptbatch.sh”时暂停。尝试在不使用“aptbatch.sh”的情况下运行“postprocessing.sh”,只需将一组随机变量写入文件即可,因此问题不在于调用后处理脚本

根据npo的作者所说,程序应该只发出一个带有脚本名称的系统命令,调用命令shell

我尝试查看相关可执行文件的权限,并将chmod+x应用于任何东西,但没有骰子。有人能想到可能导致这种情况的系统变量或权限吗

#! /bin/sh
cd ~/Melcor/NordicBWR/MinGoalFct/NordicBWR_05_08

# clean up
rm -f aptplot1* ext.goal1 DATA1*

# write read out commands for data vector to file
echo " MELCOR 0 PTF \"MELC.PTF\"" > aptplot1.gr
echo " MREAD 0 \"CFVALU_10000202\" DONE" >> aptplot1.gr
echo " write g0.s0 FILE \"./DATA1\"" >> aptplot1.gr
# execute file
aptbatch.sh -batch aptplot1.gr -nosafe -hardcopy

# postprocessing of max. data value
awk 'BEGIN {max = 0} {if ($2>max) max=$2} {GF = max-10000} {if (GF<0) GF=10000-max} END {printf("%6.5f\n", GF ) } ' DATA1 > "ext.goal1"
#/垃圾箱/垃圾箱
cd~/Melcor/NordicBWR/MinGoalFct/NordicBWR\u 05\u 08
#清理
rm-f aptplot1*ext.goal1数据1*
#将数据向量的读取命令写入文件
echo“MELCOR 0 PTF\”MELC.PTF\”>aptplot1.gr
echo“MREAD 0”CFVALU_10000202“完成”>>aptplot1.gr
echo“write g0.s0 FILE\”/DATA1\“”>>aptplot1.gr
#执行文件
aptbatch.sh-批次aptplot1.gr-nosafe-硬拷贝
#最大数据值的后处理

awk'BEGIN{max=0}{if($2>max)max=$2}{GF=max-10000}{if(GF根据@John3136的建议,尝试将完整路径放入
aptbatch.sh
,例如
/home/scripts/aptbatch.sh
,而不仅仅是名称。如果它不在执行脚本的任何shell的
$path
中,将找不到它。

在un*x上(与w32相反),通常不会在当前路径中搜索程序。 仅搜索
PATH
变量中的路径

因此,首先,尝试为脚本提供一个搜索路径。它不需要是绝对的,相对的就可以了。下面将在当前目录中运行脚本(如
/
所示)

如果您的脚本在其他地方,那么可能是交互shell的PATH变量与作为脚本运行时的PATH变量不同

试着跑步

  echo $PATH
在脚本和cmdline中,查看它们是否不同。
(可能在脚本中执行
echo$PATH>/tmp/debug.txt
,因此您可以在脚本执行后检查文件
/tmp/debug.txt

是否在同一目录中运行?(可能是无问题的wince第一行是CD).PATH很重要,因为它必须在某个地方找到aptbatch.sh。好吧,对于我浪费了半个周末的事情来说,这太简单了。谢谢你们两位。作为将来的参考,我是否可以查找任何环境变量,来告诉我使用了哪个shell?
  echo $PATH