API de shell
Las utilidades de análisis de shell están disponibles bajo ptool.sh y p.sh.
Estas utilidades trabajan al nivel de shell words. Están pensadas para dividir, citar y unir cadenas de argumentos usando reglas de shell al estilo POSIX, no para analizar la sintaxis completa de shell como tuberías, redirecciones, sustitución de comandos o expansión de variables.
ptool.sh.split
v0.1.0- Introduced.
ptool.sh.split(command) analiza una cadena de comando usando reglas de estilo shell y devuelve un arreglo de argumentos.
command(string, obligatorio): La cadena de comando que se va a dividir.- Devuelve:
string[].
Comportamiento:
- Esto analiza únicamente shell words. No interpreta operadores de shell ni ejecuta expansiones.
Ejemplo:
local args = ptool.sh.split("clippy --all-targets -- -D warnings")
El args anterior equivale a:
{"clippy", "--all-targets", "--", "-D", "warnings"}
ptool.sh.quote
Unreleased- Introducido.
ptool.sh.quote(word) cita una única shell word para que pueda incrustarse de forma segura en una cadena de comando de shell.
word(string, obligatorio): La shell word que se va a citar.- Devuelve:
string.
Comportamiento:
- La cadena devuelta es segura para shell y semánticamente equivalente a la word de entrada.
- Esto preserva el significado como shell word, no la forma textual original.
Ejemplo:
local word = ptool.sh.quote("hello world")
print(word) -- 'hello world'
ptool.sh.join
Unreleased- Introducido.
ptool.sh.join(words) une un arreglo de argumentos en una cadena de comando de shell, citando las words cuando hace falta.
words(string[], obligatorio): Las shell words que se van a unir.- Devuelve:
string.
Comportamiento:
- Las words consecutivas se unen con un solo espacio.
- La salida es adecuada para pasarla a un shell de estilo POSIX.
- Esto busca round-tripping al nivel de shell words, por lo que
ptool.sh.split(ptool.sh.join(words))es equivalente awords. ptool.sh.join(ptool.sh.split(command))puede normalizar el citado y los espacios en lugar de preservar el texto original del comando.
Ejemplo:
local cmd = ptool.sh.join({"git", "commit", "-m", "hello world"})
print(cmd) -- git commit -m 'hello world'