[英]Calling ruby from shell
当我有一个以shebang开头的可执行的ruby脚本foo
富
#!/usr/bin/env ruby
并从bash脚本bar
调用该ruby脚本作为可执行文件(即,不调用ruby foo
,而是直接调用foo
),如何从ruby脚本foo
获取bar
的完整路径?
如果这不可能,那么我之间可能有一个bash脚本baz
,所以有可能:
bar
(bash)调用baz
(bash),后者调用foo
(ruby)
bar
在没有任何显式参数的情况下调用baz
而baz
找出其调用方bar
的路径,并在调用foo
时将其作为参数传递?
出于我的目的,只要原始bash脚bar
不需要显式传递foo
是否需要将路径信息作为参数都可以。
首先,请注意,这个问题的定义不明确。 如果bar
不是指向可执行文件的唯一链接,则没有唯一路径。 假设您不在乎该问题,并且只想知道bar
访问方式,并且如果您在Linux上运行,则可以在/proc/pid-of-bar/cmdline
找到该信息。 如果foo的父级是正在运行的进程栏(应该,除非您已将其守护,或者foo
不是直接后代),否则该栏的pid可用于PPID环境中的foo(尽管ruby几乎可以肯定提供了一种更好的访问方式因此,获取您父母的pid并阅读/ proc / parent-pid / cmdline。 如果将bar作为shell脚本调用,则cmdline的第一个字符串将是解释器(以null终止),第二个字符串将是您关心的路径。
如果我理解您的问题,那么您只需要$ 0。
编辑:当然可以通过条形脚本将其传递到您的ruby脚本中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.