【问题标题】:What does "rc=$$? ; cat File1 >/proc/self/fd/2 ; exit $$rc" comand do in linux shell? [closed]"rc=$$? ; cat File1 >/proc/self/fd/2 ; exit $$r" 命令在 linux shell 中有什么作用? [关闭]
【发布时间】:2020-05-18 23:19:29
【问题描述】:

请帮助我完全理解以下命令:

python3 code.py >result.txt 2>&1 || ( rc=$$? ; cat result.txt >/proc/self/fd/2 ; exit $$rc )

在上面的代码中,我找不到rc=$$?$$rc 的含义。

【问题讨论】:

  • 这是来自 Makefile 还是什么?
  • @Shawn 这是一个 linux shell 命令
  • 看起来它被包裹在其他东西中,在 shell 之前评估字符串(将$$ 转换为$)。

标签: linux bash


【解决方案1】:

在 Bash 中,$$ 是进程 ID,? 用于查找最后执行的命令的返回值。所以基本上这会获取进程 ID 并为其分配一个变量rc。然后看起来退出代码等于进程ID。

【讨论】:

  • 感谢您的回答。请再次解释一下带有“$$rc”的部分。
  • Exit 命令正在完成场景,它接受一个作为退出代码的整数参数。这里它以存储在$$rc 中的代码退出,这是一个进程ID。因此,由于某些原因,此将 PID 存储到变量 rc,运行 cat 命令并以返回 PID 作为退出代码来完成此操作。
  • 再次非常感谢。我得到了它。 :)
  • @Charnel:我不同意你的意见;但也许我的思路有误。我请你看看我的回答,它给出了不同的解释,如果你发现其中有错误,请指出?
  • 我认为这是来自一些 Makefile。您对$? 是最后执行命令的退出状态的部分是正确的。在 Makefile 中,这些变量也使用$variable 取消引用。如果在 Makefile 中,您想将变量视为 shell 变量,请将 $ 转义为 $$,因此,Makefile 语句 - echo $$var 在 shell 看到时转换为 echo $var。该行不会以代码 == PID 退出。
【解决方案2】:

IMO,代码没有多大意义。如果您在命令行上自己尝试以下操作:

false; rc=$$?; echo $rc; echo $$rc

你会看到第一个 echo 输出了一些数字,后面跟着一个问号,第二个数字输出了相同的数字,后面跟着字母 rc

原因是$$是bash维护的一个特殊变量,它保存了当前的进程id。虽然还有一个变量保存了最近执行的命令的退出代码,但它被命名为$?,但从未在您发布的代码中引用。因此,shell 通常会为变量rc 分配一个包含PID 的字符串,然后简单地将后续的? 添加到它。

我说的是一般,因为有例外,只是极不可能发生。原因是? 在通配符中也是一个有效的通配符模式,并且匹配任何字符。现在让我们假设你的shell的PID是4711,并且在当前工作目录中恰好是一个名为4711x的文件。 $$? 将是 4711?? 将与 x 匹配,rc 将以名称 4711x 结束,而不是 4711?。如果你有两个相似的文件,4711x4711y,结果会更有趣。试试看!

exit $$rc 更加离奇。如前所述,$$rc 扩展为类似于4711rc,而exit 4711rc 完全是非法的;您会收到一条错误消息 bash: exit: ...: numeric argument required

据此,我认为要么是编写此代码的人从未调试过它,要么是您在将其复制并粘贴到此问题中时犯了一些错误。

【讨论】:

  • 我怀疑@Shawn 的评论是正确的;在 makefile 中,$$ 是一个转义的美元符号,因此在 makefile 中的rc=$$? 将转换为 shell 命令rc=$?,它将获取最后一个命令的退出代码并将其存储在变量 rc .类似地,exit $$rc 转换为 exit $?,这(因为它位于子 shell 中)将有效地将退出代码重置为之前的状态。
  • 确实,但是 OP 没有确认 Shawns 的问题,即这是一个 makefile,并在他的评论中明确回答这将是一个普通的 bash 命令。此外,该问题未标记为makefile
猜你喜欢
  • 2017-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-25
  • 2013-04-02
  • 1970-01-01
  • 2023-02-06
相关资源
最近更新 更多