【问题标题】:Invoke ruby script using shebang on linux and cmd / batch on windows在 linux 上使用 shebang 调用 ruby​​ 脚本,在 windows 上使用 cmd / batch
【发布时间】:2015-05-14 19:19:14
【问题描述】:

我相信我已经在我使用的项目中看到了一些这样的例子,但我现在找不到它们。我拥有的是一个 ruby​​ 项目,其结构如下:

~/projects/ruby/foo/bin
     bar.rb
     bar.cmd
     bar.sh

我的应用程序完全位于 bar.rb 中。我在所有文件路径逻辑中都有处理符号链接的逻辑,因此 ~/bin/bar 的符号链接将正常工作。

我遇到的问题是我希望这个文件在 windows 和 linux 上都能正常工作,因此我从 bar.rb 中取出了一个 shebang 行并想将它移到 bar.sh

#!/usr/bin/env ruby

但是现在我必须将这个 bash 文件中的所有 os 参数转发到 ruby​​ 文件,这样它才能正常工作。我在 windows cmd 文件上也没有太大的成功。

是否有更简单的方法来实现与 os 参数一起使用的跨平台 shebang 行为?

【问题讨论】:

  • Shebang 不是跨平台的。你想在这里做什么?您的应用程序只有.sh 和.cmd 入口点吗?这些脚本有什么作用吗?如果不是,最好完全避免它们。
  • 我知道shebang不是跨平台的,这就是为什么我没有把它放在bar.rb中。这个想法是 .sh 和 .cmd 文件避免使用“ruby file.rb [args]”,而是使文件可以与“bar [args]”一起使用,只要 bash 文件或 cmd 的快捷方式文件位于您的 PATH 环境变量中。如有必要,我可以提供更多应用程序的上下文。
  • ruby 解释器也应该忽略 Windows 上的 shebang 行,因此它应该是可移植的,因为离开那里是安全的。我认为 Windows 倾向于使用默认的扩展可执行文件来解决这类问题(所以我认为只需将 bar.rb 粘贴在 %PATH% 的某个位置就足够了)。

标签: ruby bash batch-file shebang


【解决方案1】:

对于 Linux,您的 bar.sh 可能看起来像(注意:没有 shebang):

/bin/env ruby bar.rb "$@"

对于 Windows,您的 bar.cmd 可能如下所示:

ruby bar.rb %*

注意:Windows 版本未经测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-13
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 2011-11-08
    • 2012-10-27
    相关资源
    最近更新 更多