Модуль: Utils::Shell Приватный
Этот модуль является частью приватного API. Этот модуль можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого модуля, поскольку он может быть удалён или изменён без предупреждения.
Краткое описание констант свернуть
- SHELL_PROFILE_MAP =
Эта константа является частью приватного API. Эту константу можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этой константы, поскольку она может быть удалена или изменена без предупреждения.
T.let( { bash: "~/.profile", csh: "~/.cshrc", fish: "~/.config/fish/config.fish", ksh: "~/.kshrc", mksh: "~/.kshrc", pwsh: "~/.config/powershell/Microsoft.PowerShell_profile.ps1", rc: "~/.rcrc", sh: "~/.profile", tcsh: "~/.tcshrc", zsh: "~/.zshrc", }.freeze, T::Hash[Symbol, String], )
- UNSAFE_SHELL_CHAR =
Эта константа является частью приватного API. Эту константу можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этой константы, поскольку она может быть удалена или изменена без предупреждения.
%r{([^A-Za-z0-9_\-.,:/@~+\n])}
Краткое описание методов класса свернуть
- .csh_quote(str) ⇒ String приватный
- .export_value(key, value, shell = preferred) ⇒ String? приватный
Заключает значения в кавычки.
- .from_path(path) ⇒ Symbol? приватный
Принимает путь и эвристически преобразует его в имя оболочки; если совпадение не найдено, возвращает
nil. - .parent ⇒ Symbol? приватный
- .preferred ⇒ Symbol? приватный
- .preferred_path(default: "") ⇒ String приватный
- .prepend_path_in_profile(path) ⇒ String? приватный
- .profile ⇒ String приватный
Возвращает файл профиля оболочки, соответствующий предпочтительной оболочке пользователя.
- .set_variable_in_profile(variable, value) ⇒ String? приватный
- .sh_quote(str) ⇒ String приватный
- .shell_with_prompt(type, preferred_path:, notice:, home: Dir.home) ⇒ String приватный
Подробное описание методов класса
.csh_quote(str) ⇒ String
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
130 131 132 133 134 135 136 137 138 139 140 141 | # File 'utils/shell.rb', line 130 def csh_quote(str) # Ruby's implementation of `shell_escape`. str = str.to_s return "''" if str.empty? str = str.dup # Anything that isn't a known safe character is padded. str.gsub!(UNSAFE_SHELL_CHAR, '\\\\\\1') # Newlines have to be specially quoted in `csh`. str.gsub!("\n", "'\\\n'") str end |
.export_value(key, value, shell = preferred) ⇒ String?
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Заключает значения в кавычки. Заключать ключи в кавычки излишне.
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | # File 'utils/shell.rb', line 40 def export_value(key, value, shell = preferred) case shell when :bash, :ksh, :mksh, :sh, :zsh "export #{key}=\"#{sh_quote(value)}\"" when :fish # fish quoting is mostly Bourne compatible except that # a single quote can be included in a single-quoted string via \' # and a literal \ can be included via \\ "set -gx #{key} \"#{sh_quote(value)}\"" when :rc "#{key}=(#{sh_quote(value)})" when :csh, :tcsh "setenv #{key}#{csh_quote(value)};" end end |
.from_path(path) ⇒ Symbol?
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Принимает путь и эвристически преобразует его в имя оболочки; если совпадение не найдено, возвращает nil.
15 16 17 18 19 20 21 | # File 'utils/shell.rb', line 15 def from_path(path) # we only care about the basename shell_name = File.basename(path) # handle possible version suffix like `zsh-5.2` shell_name.sub!(/-.*\z/m, "") shell_name.to_sym if %w[bashcshfishkshmkshpwshrcshtcshzsh].include?(shell_name) end |
.parent ⇒ Symbol?
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
34 35 36 | # File 'utils/shell.rb', line 34 def parent from_path(`ps -p #{Process.ppid} -o ucomm=`.strip) end |
.preferred ⇒ Symbol?
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
29 30 31 | # File 'utils/shell.rb', line 29 def preferred from_path(preferred_path) end |
.preferred_path(default: "") ⇒ String
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
24 25 26 | # File 'utils/shell.rb', line 24 def preferred_path(default: "") ENV.fetch("SHELL", default) end |
.prepend_path_in_profile(path) ⇒ String?
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
96 97 98 99 100 101 102 103 104 105 106 107 108 109 | # File 'utils/shell.rb', line 96 def prepend_path_in_profile(path) case preferred when :bash, :ksh, :mksh, :sh, :zsh, nil "echo 'export PATH=\"#{sh_quote(path)}:$PATH\"' >> #{profile}" when :pwsh "$env:PATH = '#{path}' + \":${env:PATH}\" >> #{profile}" when :rc "echo 'path=(#{sh_quote(path)} $path)' >> #{profile}" when :csh, :tcsh "echo 'setenv PATH #{csh_quote(path)}:$PATH' >> #{profile}" when :fish "fish_add_path #{sh_quote(path)}" end end |
.profile ⇒ String
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Возвращает файл профиля оболочки, соответствующий предпочтительной оболочке пользователя.
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | # File 'utils/shell.rb', line 58 def profile case preferred when :bash bash_profile = "#{Dir.home}/.bash_profile" return bash_profile if File.exist? bash_profile when :pwsh pwsh_profile = "#{Dir.home}/.config/powershell/Microsoft.PowerShell_profile.ps1" return pwsh_profile if File.exist? pwsh_profile when :rc rc_profile = "#{Dir.home}/.rcrc" return rc_profile if File.exist? rc_profile when :zsh return "#{ENV["HOMEBREW_ZDOTDIR"]}/.zshrc" if ENV["HOMEBREW_ZDOTDIR"].present? end shell = preferred return "~/.profile" if shell.nil? SHELL_PROFILE_MAP.fetch(shell, "~/.profile") end |
.set_variable_in_profile(variable, value) ⇒ String?
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
80 81 82 83 84 85 86 87 88 89 90 91 92 93 | # File 'utils/shell.rb', line 80 def set_variable_in_profile(variable, value) case preferred when :bash, :ksh, :mksh, :sh, :zsh, nil "echo 'export #{variable}=#{sh_quote(value)}' >> #{profile}" when :pwsh "$env:#{variable}='#{value}' >> #{profile}" when :rc "echo '#{variable}=(#{sh_quote(value)})' >> #{profile}" when :csh, :tcsh "echo 'setenv #{variable}#{csh_quote(value)}' >> #{profile}" when :fish "echo 'set -gx #{variable}#{sh_quote(value)}' >> #{profile}" end end |
.sh_quote(str) ⇒ String
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
144 145 146 147 148 149 150 151 152 153 154 | # File 'utils/shell.rb', line 144 def sh_quote(str) # Ruby's implementation of `shell_escape`. str = str.to_s return "''" if str.empty? str = str.dup # Anything that isn't a known safe character is padded. str.gsub!(UNSAFE_SHELL_CHAR, '\\\\\\1') str.gsub!("\n", "'\n'") str end |
.shell_with_prompt(type, preferred_path:, notice:, home: Dir.home) ⇒ String
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 | # File 'utils/shell.rb', line 157 def shell_with_prompt(type, preferred_path:, notice:, home: Dir.home) preferred = from_path(preferred_path) path = ENV.fetch("PATH") subshell = case preferred when :zsh zdotdir = Pathname.new(HOMEBREW_TEMP/"brew-zsh-prompt-#{Process.euid}") zdotdir.mkpath FileUtils.chmod_R(0700, zdotdir) FileUtils.cp(HOMEBREW_LIBRARY_PATH/"utils/zsh/brew-sh-prompt-zshrc.zsh", zdotdir/".zshrc") %w[.zshenv.zcompdump.zsh_history.zsh_sessions].each do |file| FileUtils.ln_sf("#{home}/#{file}", zdotdir/file) end <<~ZSH.strip BREW_PROMPT_PATH="#{path}" BREW_PROMPT_TYPE="#{type}" ZDOTDIR="#{zdotdir}" #{preferred_path} ZSH when :bash <<~BASH.strip BREW_PROMPT_PATH="#{path}" BREW_PROMPT_TYPE="#{type}" #{preferred_path} --rcfile "#{HOMEBREW_LIBRARY_PATH}/utils/bash/brew-sh-prompt-bashrc.bash" BASH else "PS1=\"\\[\\033[1;32m\\]#{type} \\[\\033[1;31m\\]\\w \\[\\033[1;34m\\]$\\[\\033[0m\\] \" #{preferred_path}" end puts notice if notice.present? $stdout.flush subshell end |
© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/Utils/Shell.html