这一行对shell脚本有什么影响?

时间:2012-03-18 16:24:30

标签: linux bash shell temp

我在很多shell脚本中都看过这行,但我不明白它的效果。有人可以解释一下吗?

tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$

5 个答案:

答案 0 :(得分:5)

它创建一个临时文件并将其路径放在$ tempfile变量中。

`tempfile 2>/dev/null`

运行tempfile命令(man tempfile)并丢弃所有错误消息。如果成功,则返回新创建的临时文件的名称。如果失败,则返回非零值,在这种情况下,命令的下一部分将运行。

对于命令this || thatthat仅在this失败时运行,即返回非零。

$$是bash中的一个变量,它扩展为shell的进程ID。 (比较psecho $$的结果。)因此tempfile=/tmp/test$$会扩展为tempfile=/tmp/test2278

据推测,稍后在脚本中,有些内容会写入$ tempfile。

答案 1 :(得分:3)

shell有一个单独的命名空间命名空间(使其成为Lisp-2,LOL),它在脚本行中被利用。 tempfile是一个命令,用于计算与tempfile变量无关的tempfile变量的值。 2> /dev/null生成一个适合用作临时文件名的路径名。 tempfile将任何错误消息从/dev/null重定向到command1 || command2(2是标准错误文件描述符)。 tempfile逻辑意味着“如果command1失败则执行command2”。如果我们无法从/tmp/test$$获取临时名称,那么我们使用$$,其中{{1}}是一个特殊的内置shell参数,它扩展为shell自己的进程ID。

答案 2 :(得分:2)

tempfile创建一个文件名类似于/tmp/tmp.XXXXXX的临时文件

2> / dev / null将命令输出重定向到/ dev / null设备,它只是抛弃它。此重定向只是忽略创建临时文件时的任何错误。

||将两个命令链接在一起如果第一个失败,则执行第二个。如果第一个成功则没有其他事情发生。

$$是当前shell的pid,这意味着如果tempfile命令失败,如果进程'pid为6052,则tempfile变量仍将包含/ tmp / test6052形式的字符串。

答案 3 :(得分:0)

该行的第一部分,直到||,运行程序tempfile并捕获变量tempfile中的标准输出,从而抛出错误。还有一个退出状态:成功为零或失败为非零(执行tempfile命令失败或运行时tempfile命令报告失败)。

||表示“如果LHS(左侧)失败,则执行RHS(右侧)”。

因此,如果tempfile命令出现问题,将使用RHS,将更简单的临时文件名分配给tempfile(变量)。

总的来说,它相当于:

if tempfile=`tempfile 2>/dev/null`
then : OK
else tempfile=/tmp/test$$
fi

只有一行,而不是四行。

我确信,无论计算机上是否存在$tempfile命令,我都可以在tempfile中获取内容。

答案 4 :(得分:0)

你看过man tempfile吗?

该行正在尝试使用tempfile(1)生成临时文件名,并将其存储在$tempfile中。如果失败(“||”,“或”部分),它将回退到/tmp/test$$的显式文件名,其中$$the PID of the executing script

相关问题