2014-06-15 67 views
0

调用红宝石当我有一个可执行的Ruby脚本foo开始与认领从外壳

#!/usr/bin/env ruby 

和bash脚本bar中调用Ruby脚本为可执行文件(即不调用ruby foo,但直接foo),我怎样才能得到bar从红宝石脚本foo的完整路径?


编辑

如果这是不可能的,那么有没有可能,如果我在中间得有一个bash脚本baz

bar(bash)的调用baz(庆典),它调用foo(ruby)

其中bar调用baz没有任何明确的参数和baz数字出调用者bar的路径,并在调用foo时将其作为参数传递?

就我的目的而言,只要原始bash脚本bar不需要明确地通过,那么foo是否需要接收路径信息作为参数即可。

+0

您在调用foo时必须传递$ 0作为参数。如果$ 0不够好,请查看:http://stackoverflow.com/a/246128/193892 –

+0

@ Prof.Falken我想在没有明确地将这个参数传递给'foo'的情况下做到这一点。 – sawa

+0

我不认为这是可能的。我的意思是,该机制将传递这些信息的机制是什么? –

回答

3

首先,请注意,问题没有很好的定义。如果bar不是可执行文件的唯一链接,则不存在唯一路径。假设你不关心这个问题,并且你只想知道bar是如何被访问的,并且如果你在Linux上运行那个信息在/proc/pid-of-bar/cmdline中可用。如果foo的父节点是进程运行栏(它应该是,除非你已经守护进程或者foo不是直接后代),那么在PPID环境中,该节点的pid可用于foo(尽管ruby几乎肯定提供了一种更好的访问方式)因此,获取父母的pid并读取/ proc/parent-pid/cmdline。如果bar被作为shell脚本调用,cmdline的第一个字符串将是解释器(由null结尾),第二个字符串将是您关心的路径。

+0

当'bar'有符号链接的时候,我想要真正的路径。 – sawa

+0

你想看看'/ proc/pid-of-bar/cmdline' –

+0

好吧,我可以使用'Process.ppid'来获取父进程的pid。 – sawa

-1

如果我明白你的问题$ 0是你所需要的。

编辑:当然通过这个脚本传递给你的ruby脚本。