Estoy usando Ubuntu desde la versión 10.04 y lo encontré más amigable en comparación con Windows. En este momento estoy usando 'Precise 12.04'. Creé muchos lanzadores personalizados para bash scripts y nunca tuve ningún problema hasta ayer.
He instalado un paquete de software que tiene varios ejecutables. El ejecutable principal abaqus
se encuentra en optsoftwaresname
y es un enlace simbólico al ejecutable abq610i
en /opt/softwaresname/executables/
.
El exe principal abaqus
requiere algunos argumentos de línea de comandos. Uso el argumento cae
, (es decir, abaqus cae
) pero con otro comando para representar los gráficos en un mejor modo, por lo que la llamada final es:XLIB_SKIP_ARGB_VISUALS=1 abaqus cae
Creé un alias para este comando largo en .bash_rc
archivo como:
alias abaquscae="XLIB_SKIP_ARGB_VISUALS=1 abaqus cae"
Todo funcionó perfectamente bien, ya que el alias ejecuta el software. Siendo un campeón perezoso, pensé en crear un lanzador de muelle de El Cairo para esto. Así que ingresé abaquscae
en el cuadro "comando para iniciar al hacer clic" y marcó "Ejecutar en una terminal". Sin embargo, para mi consternación, al hacer clic en el lanzador me dio un error::
There was an error creating the child process for this terminal
Failed to execute child process "abaquscae" (No such file or directory)
En consecuencia, escribí un pequeño archivo de script bash "abaquscae.sh":
#!/bin/sh
"XLIB_SKIP_ARGB_VISUALS=1 abaqus cae"
y lo guardé, lo hice ejecutable y al ejecutarlo en bash shell, nuevamente obtuve el error similar, es decir:
./abaquscae.sh: 2: ./abaquscae.sh: XLIB_SKIP_ARGB_VISUALS=1 abaqus cae: not found
Ahora estoy totalmente perdido, he intentado muchos trucos, por ejemplo,
1- eliminar las comas en el script bash,
2- convertirlo en dos2unix
,
3- utilizando la ruta completa al ejecutable
pero este script no se ejecuta a través de bash terminal.
PROBLEMA:
El comando (así como su alias) funcionan bien en la terminal bash, sin embargo, cuando se ejecutan a través de algún otro canal (por ejemplo, secuencias de comandos/lanzadores), la terminal lamentablemente no los reconoce 🙁 ..
Si algún experto tiene consejos/información sobre cómo resolver este problema, por favor compártalo. Estaré muy agradecido.
Respuesta aceptada:
Creo que el guión debería ser así:
#!/bin/bash
XLIB_SKIP_ARGB_VISUALS=1 /opt/softwaresname/abaqus cae
También puede crear el lanzador usando el siguiente comando:
bash -c 'XLIB_SKIP_ARGB_VISUALS=1 /opt/softwaresname/abaqus cae'
Establecer variables de entorno antes del nombre del archivo ejecutable en una línea de comandos es una característica de los shells CLI (interfaz de línea de comandos). Si pones VARIABLE=value /path/to/executable
en un lanzador, el programa que lee el lanzador (y efectivamente lanza el ejecutable) intentará encontrar un archivo llamado "VARIABLE=valor" y, por supuesto, fallará.
Ese comando inicia bash
, el shell de usuario predeterminado en Ubuntu, y dígale que se ejecute (el -c
opción) la cadena "XLIB_SKIP_ARGB_VISUALS=1 /opt/softwaresname/abaqus cae", por lo que se interpretará como si lo escribiera en la CLI.