无法将 bashrc 定义的参数传递给终端

无法将 bashrc 定义的参数传递给终端

我正在尝试编写一个代码来自动化 Nasa 的一些 Heasoft 程序 - 这并不重要 -,

heainit 在 .bashrc 中定义为:

export HEADAS=~/heasoft-6.27.2/x86_64-pc-linux-gnu-libc2.31
alias heainit='. $HEADAS/headas-init.sh'

所以每当我heainit在终端上写字时,它都能正常工作。但是,每当我尝试通过 c++ 或 Python 将“heainit”传递给终端时,代码本身就可以工作,但无法启动程序!

在 C++ 中我尝试过:

#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <cstdlib>
#include <string>
#include <sstream>
using namespace std;
int main(int argc, char** argv){ string ind, outd;
const char* heainit = "/home/karim/heasoft-6.27.2/x86_64-pc-linux-gnu-libc2.31/headas-init.sh" ; 
system(heainit);
return 0;
}

int main(string, char*){
string ind, outd;
std::string HEADAS = "/home/karim/heasoft-6.27.2/x86_64-pc-linux-gnu-libc2.31";
std::string str = std::string(". //") + HEADAS + std::string("/headas-init.sh");
const char *c = str.c_str(". /home/karim/heasoft-6.27.2/x86_64-pc-linux-gnu-libc2.31/heafas-init.sh");
system(const char* c);
return 0;
}

在python中我尝试过:

import os
import subprocess
os.system("heainit")

和子进程.运行(“heainit”,capture_output = True)

HEADAS=~/heasoft-6.27.2/x86_64-pc-linux-gnu-libc2.31
heainit="." + "\t" + HEADAS + "/headas-init.sh"
subprocess.run(heainit, shell=True)

我最近的尝试是编写一个 bash 脚本:

#!/bin/bash
export HEADAS=~/heasoft-6.27.2/x86_64-pc-linux-gnu-libc2.31
export HEADAS
alias heainit='. $HEADAS/headas-init.sh'

heainit

提示如下:./hea.sh: 第 6 行:heainit: 未找到命令

每当我使用任何其他命令(例如“ls -l”)执行上述任何代码时,它都能完美运行:))我不知道应该如何将这个参数(程序启动时应该跟随其他参数)传递给终端,我也不知道我还需要做什么。也许问题微不足道,但我已经在那里呆了很长时间了。

答案1

Bash 别名不是“真正的”可执行文件,不能从 bash 外部调用。您需要从 C++/Python/任何程序中访问环境变量来重建完整路径headas-init.sh,创建一个实际的 bash 脚本来调用headas-init.sh,然后在您自己的程序中调用该脚本,或者调用/bin/bash并传入您的别名作为要使用-cbash 参数之类的代码执行的代码。

相关内容