首页 > 解决方案 > 通过 Ruby 脚本的 Unix 命令无效

问题描述

我喜欢我的终端输出是彩色的。我不喜欢处理 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

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

有什么想法吗 ?

先感谢您

标签: rubymacosshell

解决方案


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

puts %{export foo=bar; printenv foo}

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

system "export foo=bar; printenv foo".

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

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

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


推荐阅读