Spec-Zone.ru › Homebrew

Модуль: Utils::Shell Приватный

Расширен модулем:
T::Helpers
Включён в:
Formula
Определён в:
utils/shell.rb

Этот модуль является частью приватного 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. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • str (String)

Возвращает:

  • (String)


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. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Заключает значения в кавычки. Заключать ключи в кавычки излишне.

Параметры:

  • key (String)
  • value (String)
  • shell (Symbol, nil) (по умолчанию: preferred)

Возвращает:

  • (String, nil)


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.

Параметры:

  • path (String)

Возвращает:

  • (Symbol, 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. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Symbol, nil)


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. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Symbol, nil)


29
30
31
# File 'utils/shell.rb', line 29

def preferred
  from_path(preferred_path)
end

.preferred_path(default: "") ⇒ String

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • default (String) (по умолчанию: "")

Возвращает:

  • (String)


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. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • path (String)

Возвращает:

  • (String, nil)


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. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает файл профиля оболочки, соответствующий предпочтительной оболочке пользователя.

Возвращает:

  • (String)


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. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • variable (String)
  • value (String)

Возвращает:

  • (String, nil)


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. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • str (String)

Возвращает:

  • (String)


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. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • type (String)
  • preferred_path (String)
  • notice (String, nil)
  • home (String) (по умолчанию: Dir.home)

Возвращает:

  • (String)


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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API