如何确定红宝石的位置?
你可以试试
gem which rails
获取特定宝石的位置,或者
echo $GEM_HOME
获取您的宝石的主目录
gem environment
...应该为您提供所需的所有信息。
使用 budler,您可以做到:
bundle info <gem>
结果:
* pg (1.4.5)
Summary: Pg is the Ruby interface to the PostgreSQL RDBMS
Homepage: https://github.com/ged/ruby-pg
Path: /home/user/.rvm/gems/ruby-3.1.3/gems/pg-1.4.5
简单的解决方案是:
gem environment
但是,它显示了一个很大的输出,其中包含许多我们不希望看到的信息,例如
RUBYGEMS VERSION
, RUBY VERSION
, INSTALLATION DIRECTORY
, USER INSTALLATION DIRECTORY
, RUBY EXECUTABLE
, GIT EXECUTABLE
, EXECUTABLE DIRECTORY
, SPEC CACHE DIRECTORY
、SYSTEM CONFIGURATION DIRECTORY
、RUBYGEMS PLATFORMS
、GEM CONFIGURATION
、REMOTE SOURCES
和 SHELL PATH
。
我们只想要
GEM PATH
!
我有一个解决方案,使用
grep
+ awk
。
gem environment | grep -A 1 "GEM PATHS:" | awk 'NR==2 { sub(/^[[:space:]]+- /, ""); print }'
gem environment
:此命令用于显示有关 RubyGems 环境的信息,包括有关 gem 安装、路径和配置的详细信息。
grep -A 1 "GEM PATHS:"
:这部分命令用于在 gem environment
的输出中搜索包含“GEM PATHS:”的行,并在输出中包含其后面的行 (-A 1
)。换句话说,它提取带有“GEM PATHS:”的行以及紧接其下方的行。
awk 'NR==2 { sub(/^[[:space:]]+- /, ""); print }'
:
awk
:这是一个功能强大的文本处理工具,可以让您逐行操作和处理文本文件。
'NR==2'
:这是一个 AWK 条件,指定仅对第二行输入(“GEM PATHS:”下面的行)执行以下操作。
{ sub(/^[[:space:]]+- /, ""); print }
:
sub(/^[[:space:]]+- /, "")
:此 AWK 函数 (sub
) 用于将一个模式替换为另一个模式。在本例中,它用于删除行中的前导空格和连字符 (^[[:space:]]+-
)。print
:该命令用于将修改后的行打印到标准输出。因此,总而言之,该命令从
gem environment
输出中提取“GEM PATHS:”下面的行,删除该行的前导空格和连字符,然后打印生成的文件路径。