在命令行中,我得到了以下信息:
$ FOO=foo
$ echo $FOO
foo
$ echo $$FOO
11971FOO在这里,$$解析为shell的PID,并逐字打印"FOO“。
现在,为了理解和调试一些脚本,我发现了以下内容:
#!/bin/bash
FILE1=/path/to/file/1
FILE2=/path/to/file/2
echo $$FILE1 >> $$FILE2该脚本来自Debian包的postinstall脚本。这是要经过预处理才能运行吗?
更新:脚本是使用epm构建并通过以下指令读取的包的一部分:
%postinstall <script.sh在生成的deb包中,postinst脚本如下:
#!/bin/bash
FILE1=/path/to/file/1
FILE2=/path/to/file/2
echo $FILE1 >> $FILE2因此,处理是由epm或dpkg完成的。
发布于 2015-12-29 07:49:21
这显然是EPM包装工具的一个特点。引用文献资料
请注意,列表文件中指定的所有命令都将使用EPM提供的变量扩展,因此请确保引用命令中的任何美元符号($)字符。例如,"$foo“被"foo”的值替换,而"$$foo“则变成"$foo”。
发布于 2015-12-22 12:42:10
$$打印进程ID,在您的情况下它是11971。
因为在那之后有一个FOO,所以echo将FOO转储到11971之后,所以
11971FOO准确地说,它是运行会话的bash的进程id。要验证这一点,您可以这样做:
kill -9 11971它将终止当前会话。正常情况下的以下脚本
#!/bin/bash
FILE1=/path/to/file/1
FILE2=/path/to/file/2
echo $$FILE1 >> $$FILE2不会进行任何预处理。它将继续追加该文件。
current_shell_process_id_FILE2在包含内容的当前目录中
current_shell_process_idFILE1https://stackoverflow.com/questions/34415787
复制相似问题