Shell 在通过RPM spec文件进行复制时,能否在文件中展开环境变量?

Shell 在通过RPM spec文件进行复制时,能否在文件中展开环境变量?,shell,sed,rpm,cp,Shell,Sed,Rpm,Cp,这可能是一个有点尴尬的问题,我不知道这是否可能 问题是: file.txt 我想在我的rpm中加入上述文件。RPM创建的.spec文件对此特定文件只有以下操作 cp/root/template/file.txt/home/gaur/hello.java 如果不使用.spec文件中的某些逻辑(用于rpm创建),当我将其从/root/template/file.txt复制到/home/gaur/hello.java时,file.txt中的值(即${MY_USERNAME}会被gaur替换吗?(通过在

这可能是一个有点尴尬的问题,我不知道这是否可能

问题是:

file.txt
我想在我的rpm中加入上述文件。RPM创建的.spec文件对此特定文件只有以下操作

cp/root/template/file.txt/home/gaur/hello.java

如果不使用.spec文件中的某些逻辑(用于rpm创建),当我将其从
/root/template/file.txt
复制到
/home/gaur/hello.java
时,file.txt中的值(即
${MY_USERNAME}
会被
gaur
替换吗?(通过在这个
文件.txt中放入一些内容

注意:我知道我可以在
.spec
中使用
sed
,但我只是想知道
file.txt
中是否有一些逻辑


注意:
/root/template
中的模板文件可以是任何语言,包括shell、Python、Perl等。

查看替代方案,更好的方法是生成spec文件本身(使用sed或任何工具),因为您的rpm显然用于为可能更改的路径名(用户名)生成数据

例如,您的rpm可能用于创建具有示例程序的用户。用户名将是示例程序中替换的参数,以及传递给
useradd
的参数

生成spec文件还可以让您生成rpm的
%files
部分,使其与实际路径名匹配

依赖环境变量会很尴尬:

  • 从安装(root)用户的环境中继承它可能不会提供所需的值,因为
    sudo
    会修剪大多数环境变量,并且
  • 在spec文件中的脚本中使用环境变量通常是不必要的,因为它处理shell变量

非常确定您所要求的是不可能的,因为RPM将提供已编译的Java字节码,而您要求修改源代码。为此,正如您所说,
sed
或类似的方法将是可行的。

您能把您的问题说得更清楚一点吗?听起来像是您在问“我可以让
cp
执行变量替换吗?”,答案当然是,不,它不这样做,它只是复制文件。但也许你在问其他问题?你能重新表述“想要加入上述文件”吗,因为否则我们在做假设。
public class HelloWorld {
   public static void main(String[] args) {
          System.out.println("Hello, ${MY_USERNAME}");
   }
}