Saltar al contenido principal
Version: v0.9.1

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 a words.
  • 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'