Я редактирую свои точечные файлы и чувствую, что это должно быть просто, но это не так. Я хочу получить результат этой командной строки:
system_profiler SPHardwareDataType | grep 'Serial Number (system)' | awk '{print $4}'
и поместите его в переменную в chezmoi:
{{- $serialNumber := "Unknown" -}}
{{- if eq .chezmoi.os "darwin" -}}
{{- $serialNumber := output "sh" "-c" "system_profiler SPHardwareDataType | grep 'Serial Number (system)' | awk '{print $4}'" -}}
{{- end -}}
[data]
serial_number = {{ $serialNumber | quote }}
Должно быть просто, но как бы я ни избежал этих «4 долларов» в конце, я получаю ошибку.
Я был бы вполне доволен:
{{- $serialNumber := output "my_command_wrapped_in_a_shell_script.sh" -}}
но я не могу найти «официальный» способ для chezmoi включать сценарии оболочки, которые не являются частью семейства run_*.
Если кто-нибудь научит меня тонкостям побега, я буду рад. Я считаю, что это должно быть намного проще, чем есть на самом деле.
Я пробовал Google, чат-ботов, официальные документы, беспорядочно разбрасывал черные косые черты, стучал по клавиатуре...
Согласно документу, вы можете вызвать сценарий оболочки, если используете абсолютный путь: /path/to/script.sh





ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Это не ответ о побеге команды output Чезмоя.
Возможно, вы этого не видели; пример команды chezmoi ioreg касается получения серийного номера платформы в macOS.
{{ if eq .chezmoi.os "darwin" }}
{{ $serialNumber := index ioreg "IORegistryEntryChildren" 0 "IOPlatformSerialNumber" }}
{{ end }}
Это должно дать тот же результат, что и следующий с output:
system_profiler SPHardwareDataType | awk '/Serial Number/ {print $NF}'
Должен быть лучший ответ, не так ли? Решает проблему, которая у меня есть на самом деле, а не ту, которая, как мне кажется, у меня есть. Однако мне все равно хотелось бы знать, как правильно избежать этой команды.
Извините, я не нашел экранирующую строку в документе и не могу проверить chezmoi самостоятельно. Вы пытались экранировать обратную косую черту $ в своем awk-коде?
Кроме того, вы хотите избежать бесполезного grep;
system_profiler SPHardwareDataType | awk '/Serial Number \(system\)/ {print $4}'