【问题标题】:Unix command via Ruby script not effective通过 Ruby 脚本的 Unix 命令无效
【发布时间】:2021-06-25 13:28:28
【问题描述】:

我喜欢我的终端输出是彩色的。 我不喜欢处理 bash 配置文件。

所以我以前只是在终端(macOS)中执行这两个命令:

export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced

它完成了这项工作。 当然,每次我想给我的外壳上色时,写它们很快就会变得很累。

所以我想:让我们用 Ruby 脚本自动执行这些操作:

#!/usr/bin/env ruby

puts "\n======== COLOR ME =======\n"

puts %x{export CLICOLOR=1}
puts %x{export LSCOLORS=GxFxCxDxBxegedabagaced}
puts "You are now colored\n"
puts ""

因此,在正确的目录中,我的意图是简单地执行这个简单的命名脚本:

ruby colorme.rb

问题来了: 我创建它时它曾经工作过。 现在我们只是几天后,它不再起作用了。我不知道为什么... 我没有更新任何东西,没有移动任何文件(至少我是这么认为的)......

有什么想法吗?

提前谢谢你

【问题讨论】:

  • 抱歉,您无法使用 Ruby 为调用 shell 定义环境变量。只需将这些导出添加到您的 ~/.bash_profile 或其他任何地方
  • @Fravadona 谢谢。我更好地理解了为什么我的脚本现在无效。不幸的是,使用 bash_profile 文件对我来说不是一个解决方案。我的工作需要一直在许多不同的计算机(不同的操作系统版本)上工作。运行一个简单的脚本对我来说听起来更有吸引力(从工作流程的角度来看),而不是每天在不同的系统、不同的环境中修改许多不同的 bash 配置文件。编写脚本来修改 bash 配置文件或替换 bash 配置文件对我来说听起来也很冒险、不可行、不可维护。无论如何,谢谢你的澄清。

标签: ruby macos shell


【解决方案1】:

除了export 语句没有向标准输出写入任何内容,因此您没有任何puts 可以显示给您的事实之外,您的%x 命令会生成一个子进程,并且在其中处理您设置环境变量。当然,之后你就看不到它们了。例如,如果你会做一个

puts %{export foo=bar; printenv foo}

(假设您的 PATH 中有 printenv),您会看到打印的值,尽管这可以通过以下方式更简单地实现

system "export foo=bar; printenv foo".

如果要在当前进程中设置环境变量,则必须使用ENV 哈希:

ENV['foo']='bar'
system("printenv foo") # prints bar

这与您在子进程中运行的 shell 无关。

【讨论】:

    【解决方案2】:

    使用%x{...},启动子shell(即/bin/sh),并执行内容。返回输出。

    由于这是在退出的子 shell 中运行的,因此更改不会影响正在运行的 ruby​​ 解释器,也不会影响 ruby​​ 的父 shell。

    在这种情况下,您必须“处理 bash 配置文件”。

    【讨论】:

    • 谢谢。我更好地理解了为什么我的脚本现在无效。不幸的是,使用 bash_profile 文件对我来说不是一个解决方案。我的工作需要一直在许多不同的计算机(不同的操作系统版本)上工作。运行一个简单的脚本对我来说听起来更有吸引力(从工作流程的角度来看),而不是每天在不同的系统、不同的环境中修改许多不同的 bash 配置文件。编写脚本来修改 bash 配置文件或替换 bash 配置文件对我来说听起来也很冒险、不可行、不可维护。无论如何,谢谢你的澄清。
    • 我所有的点文件和配置都存储在 git 中。当我去一台新机器时,我基本上可以只用 git clone 并且我已经准备好了我喜欢的环境。
    • 干杯,我会调查的。我只需要它是非破坏性的(就像我从未去过那里一样)并且足够快(比简单地输入 2 个导出命令还快)。不过,当我处理不属于任何人的全新计算机时,git clone 听起来是个不错的方法。
    猜你喜欢
    • 2011-11-01
    • 1970-01-01
    • 2015-03-16
    • 1970-01-01
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    相关资源
    最近更新 更多