您是否可以在通过RPM规范文件进行复制时扩展文件中的环境变量?

时间:2016-02-10 11:09:01

标签: shell sed rpm cp

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

问题是:

file.txt

public class HelloWorld {
   public static void main(String[] args) {
          System.out.println("Hello, ${MY_USERNAME}");
   }
}

我想在我的一个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中添加内容?

注意:我知道我可以在sed中使用.spec,但我很想知道我们是否可以在file.txt内部使用某些逻辑。

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

2 个答案:

答案 0 :(得分:0)

考虑替代方案,更好的方法是生成spec-file本身(使用sed或任何工具),因为你的rpm显然用于为可能改变的路径名(用户名)生成数据。 / p>

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

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

依赖环境变量会很尴尬:

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

答案 1 :(得分:0)

非常确定您要求的是不可能的,因为RPM会提供编译的Java字节码,而您要求修改源代码。为此,就像你说的那样,sed或类似的将是你要走的路。