2014-06-15 89 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腳本。