首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$$FOO在bash中(在用epm构建的deb包中)做什么?

$$FOO在bash中(在用epm构建的deb包中)做什么?
EN

Stack Overflow用户
提问于 2015-12-22 12:18:51
回答 2查看 332关注 0票数 5

在命令行中,我得到了以下信息:

代码语言:javascript
复制
$ FOO=foo
$ echo $FOO
foo
$ echo $$FOO
11971FOO

在这里,$$解析为shell的PID,并逐字打印"FOO“。

现在,为了理解和调试一些脚本,我发现了以下内容:

代码语言:javascript
复制
#!/bin/bash
FILE1=/path/to/file/1
FILE2=/path/to/file/2
echo $$FILE1 >> $$FILE2

该脚本来自Debian包的postinstall脚本。这是要经过预处理才能运行吗?

更新:脚本是使用epm构建并通过以下指令读取的包的一部分:

代码语言:javascript
复制
%postinstall <script.sh

在生成的deb包中,postinst脚本如下:

代码语言:javascript
复制
#!/bin/bash
FILE1=/path/to/file/1
FILE2=/path/to/file/2
echo $FILE1 >> $FILE2

因此,处理是由epm或dpkg完成的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-29 07:49:21

这显然是EPM包装工具的一个特点。引用文献资料

请注意,列表文件中指定的所有命令都将使用EPM提供的变量扩展,因此请确保引用命令中的任何美元符号($)字符。例如,"$foo“被"foo”的值替换,而"$$foo“则变成"$foo”。

票数 2
EN

Stack Overflow用户

发布于 2015-12-22 12:42:10

$$打印进程ID,在您的情况下它是11971

因为在那之后有一个FOO,所以echoFOO转储到11971之后,所以

代码语言:javascript
复制
11971FOO

准确地说,它是运行会话的bash的进程id。要验证这一点,您可以这样做:

代码语言:javascript
复制
kill -9 11971

它将终止当前会话。正常情况下的以下脚本

代码语言:javascript
复制
#!/bin/bash
FILE1=/path/to/file/1
FILE2=/path/to/file/2
echo $$FILE1 >> $$FILE2

不会进行任何预处理。它将继续追加该文件。

代码语言:javascript
复制
current_shell_process_id_FILE2

在包含内容的当前目录中

代码语言:javascript
复制
current_shell_process_idFILE1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34415787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档