Класс: SystemCommand
- Наследует:
- Object
- Object
- SystemCommand
- Подключает:
- Context
- Определён в:
- system_command.rb
Обзор
Этот класс является частью внутреннего API. Этот класс можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением casks и formulae. По возможности сторонним разработчикам следует избегать использования этого класса, поскольку он может быть удалён или изменён без предупреждения.
Класс для запуска подпроцессов и перехвата их вывода и кода завершения.
Определено в пространстве имён
Краткое описание методов класса свернуть
- .run(executable, args: [], sudo: false, sudo_as_root: false, env: {}, input: [], must_succeed: false, print_stdout: false, print_stderr: true, debug: nil, verbose: nil, secrets: [], chdir: nil, reset_uid: false, run_as_real_uid: false, timeout: nil) ⇒ SystemCommand::Result приватный
- .run!(executable, args: [], sudo: false, sudo_as_root: false, env: {}, input: [], must_succeed: true, print_stdout: false, print_stderr: true, debug: nil, verbose: nil, secrets: [], chdir: nil, reset_uid: false, run_as_real_uid: false, timeout: nil) ⇒ SystemCommand::Result приватный
Краткое описание методов экземпляра свернуть
- #command ⇒ Array<String> приватный
- #initialize(executable, args: [], sudo: false, sudo_as_root: false, env: {}, input: [], must_succeed: false, print_stdout: false, print_stderr: true, debug: nil, verbose: nil, secrets: [], chdir: nil, reset_uid: false, run_as_real_uid: false, timeout: nil) ⇒ void конструктор приватный
- #run! ⇒ SystemCommand::Result приватный
Методы, подключённые из Context
current, current=, #quiet?, #with_context
Подробное описание конструкторов
#initialize(executable, args: [], sudo: false, sudo_as_root: false, env: {}, input: [], must_succeed: false, print_stdout: false, print_stderr: true, debug: nil, verbose: nil, secrets: [], chdir: nil, reset_uid: false, run_as_real_uid: false, timeout: nil) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 | # File 'system_command.rb', line 189 def initialize(executable, args: [], sudo: false, sudo_as_root: false, env: {}, input: [], must_succeed: false, print_stdout: false, print_stderr: true, debug: nil, verbose: nil, secrets: [], chdir: nil, reset_uid: false, run_as_real_uid: false, timeout: nil) require "extend/ENV" @executable = executable @args = args raise ArgumentError, "`sudo_as_root` cannot be set if sudo is false" if !sudo && sudo_as_root raise ArgumentError, "`reset_uid` and `run_as_real_uid` cannot both be true" if reset_uid && run_as_real_uid if print_stdout.is_a?(Symbol) && print_stdout != :debug raise ArgumentError, "`print_stdout` is not a valid symbol" end if print_stderr.is_a?(Symbol) && print_stderr != :debug raise ArgumentError, "`print_stderr` is not a valid symbol" end @sudo = sudo @sudo_as_root = sudo_as_root env.each_key do |name| next if /^[\w&&\D]\w*$/.match?(name) raise ArgumentError, "Invalid variable name: #{name}" end @env = env @input = T.let(Array(input), T::Array[String]) @must_succeed = must_succeed @print_stdout = print_stdout @print_stderr = print_stderr @debug = debug @verbose = verbose @secrets = T.let((Array(secrets) + ENV.sensitive_environment.values).uniq, T::Array[String]) @chdir = chdir @reset_uid = reset_uid @run_as_real_uid = run_as_real_uid @timeout = timeout end |
Подробное описание методов класса
.run(executable, args: [], sudo: false, sudo_as_root: false, env: {}, input: [], must_succeed: false, print_stdout: false, print_stderr: true, debug: nil, verbose: nil, secrets: [], chdir: nil, reset_uid: false, run_as_real_uid: false, timeout: nil) ⇒ SystemCommand::Result
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
102 103 104 105 106 107 | # File 'system_command.rb', line 102 def self.run(executable, args: [], sudo: false, sudo_as_root: false, env: {}, input: [], must_succeed: false, print_stdout: false, print_stderr: true, debug: nil, verbose: nil, secrets: [], chdir: nil, reset_uid: false, run_as_real_uid: false, timeout: nil) new(executable, args:, sudo:, sudo_as_root:, env:, input:, must_succeed:, print_stdout:, print_stderr:, debug:, verbose:, secrets:, chdir:, reset_uid:, run_as_real_uid:, timeout:).run! end |
.run!(executable, args: [], sudo: false, sudo_as_root: false, env: {}, input: [], must_succeed: true, print_stdout: false, print_stderr: true, debug: nil, verbose: nil, secrets: [], chdir: nil, reset_uid: false, run_as_real_uid: false, timeout: nil) ⇒ SystemCommand::Result
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
129 130 131 132 133 134 | # File 'system_command.rb', line 129 def self.run!(executable, args: [], sudo: false, sudo_as_root: false, env: {}, input: [], must_succeed: true, print_stdout: false, print_stderr: true, debug: nil, verbose: nil, secrets: [], chdir: nil, reset_uid: false, run_as_real_uid: false, timeout: nil) run(executable, args:, sudo:, sudo_as_root:, env:, input:, must_succeed:, print_stdout:, print_stderr:, debug:, verbose:, secrets:, chdir:, reset_uid:, run_as_real_uid:, timeout:) end |
Подробное описание методов экземпляра
#command ⇒ Array<String>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
228 229 230 | # File 'system_command.rb', line 228 def command [*command_prefix, executable.to_s, *] end |
#run! ⇒ SystemCommand::Result
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 | # File 'system_command.rb', line 137 def run! $stderr.puts Formatter.redact_secrets(command.shelljoin.gsub('\=', "="), @secrets) if verbose? && debug? @output = T.let([], T.nilable(T::Array[[Symbol, String]])) @output = T.must(@output) each_output_line do |type, line| case type when :stdout case @print_stdout when true $stdout << Formatter.redact_secrets(line, @secrets) when :debug $stderr << Formatter.redact_secrets(line, @secrets) if debug? end @output << [:stdout, line] when :stderr case @print_stderr when true $stderr << Formatter.redact_secrets(line, @secrets) when :debug $stderr << Formatter.redact_secrets(line, @secrets) if debug? end @output << [:stderr, line] end end result = Result.new(command, @output, T.must(@status), secrets: @secrets) result.assert_success! if must_succeed? result end |
© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/SystemCommand.html