2 votos

Chmod +x no funciona como se esperaba, ejecutando otra herramienta en su lugar

Acabo de escribir una herramienta simple de línea de comandos que funciona bien con swift pero no se ejecuta como ejecutable después de chmod +x ...

Esto está sucediendo en mi sistema, por lo que podría estar relacionado con la configuración pero no estoy seguro de cómo resolverlo.


Crear script:

vi test.swift

Ingrese el contenido:

import Foundation
print("¡Hola, Mundo!")

Al ejecutar normalmente swift test.swift obtengo ¡Hola, Mundo! como se esperaba, pero cuando lo hago ejecutable y lo ejecuto, falla.

Hacerlo ejecutable:

chmod +x test.swift
./test.swift

Salida:

Versión: ImageMagick 7.1.0-52 Q16-HDRI aarch64 20549 https://imagemagick.org
Derechos de autor: (C) 1999 ImageMagick Studio LLC
Licencia: https://imagemagick.org/script/license.php
Características: Cifrado DPC HDRI Módulos OpenMP(5.0) 
Delegados (integrados): bzlib fontconfig freetype gslib heic jng jp2 jpeg lcms lqr ltdl lzma openexr png ps raw tiff webp xml zlib
Compilador: gcc (4.2)
Uso: importar [opciones ...] [ archivo ]

Ajustes de imagen:
  -adjoin              unir imágenes en un solo archivo multiimagen

De forma predeterminada, 'archivo' se escribe en el formato de imagen MIFF. Para
especificar un formato de imagen específico, preceda el nombre de archivo con un nombre de formato de imagen y dos puntos (es decir, ps:imagen) o especifique el tipo de imagen como sufijo del nombre de archivo (es decir, imagen.ps). Especifique 'archivo' como '-' para
entrada o salida estándar.
import: el soporte de biblioteca delegada no está integrado '' (X11) @ error/import.c/ImportImageCommand/1297.
./test.swift: línea 3: error de sintaxis cerca del token inesperado `¡Hola, Mundo!"'
./test.swift: línea 3: `print("¡Hola, Mundo!")'

¿Por qué está ejecutando la herramienta de línea de comandos imagemagick?

0 votos

¿El comando cat ./test.swift muestra el archivo esperado?

0 votos

@mmmmmm Sí, cat muestra el contenido como se esperaba.

0 votos

También, tu archivo test.swift no tiene una línea #!. Lo necesitas cuando quieras ejecutar el programa como ./test.swift. Por lo tanto, se ejecuta el comando externo import.

6voto

yoliho Puntos 340

El problema es que la terminal que ejecuta el script no sabe qué programa ejecutar a través de test.swift.

En los scripts necesitas o bien ejecutar el programa con el archivo como argumento, por ejemplo:

swift test.swift

o decirle a la terminal cuál es el programa que debe ejecutar en el script. Esto se hace con una línea de hash bang que comienza con #! Por lo tanto, el script debería ser:

#! /usr/bin/swift
import Foundation
print("¡Hola, Mundo!")

1 votos

¡Oh hombre! Esto fue claramente un error de mi parte. Gracias por resaltar esto. Muy apreciado.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X