ruby - 通过 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
这就是问题所在:当我创建它时它曾经工作过。现在我们只是几天后,它不再起作用了。我不知道为什么......我没有更新任何东西,没有移动任何文件(至少我是这么认为的)......
有什么想法吗 ?
先感谢您
解决方案
除了该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 无关。
推荐阅读
- node.js - 确保子文档的属性在猫鼬中具有唯一值
- android - 更好的 Xamarin Android 调试体验?
- python - 带有整数标量的 TypeErrors
- rstudio - RStudio 无法输入某些组合键作为修改后的快捷键
- xslt-2.0 - XSL-FO 两个单独的脚注块 (XEP)
- android - 如何对 Android View 动画 endAction 进行单元测试?
- python - 如何将局部变量转换为全局变量,python?
- spring - spring-cloud-config-server升级后LEAF和MAP冲突
- https - 如何让任意应用程序信任我的 SSL 证书?
- php - 找不到类“Illuminate\Notifications\NotificationServiceProvider”