Používám Ubuntu od verze 10.04 a zjistil jsem, že je ve srovnání s Windows přátelštější. Právě teď používám ‚Precise 12.04‘. Vytvořil jsem mnoho vlastních spouštěčů pro bash skripty a až do včerejška jsem neměl žádný problém.
Nainstaloval jsem softwarovou sadu, která má více spustitelných souborů. Hlavní spustitelný soubor abaqus
se nachází v optsoftwaresname
a je symbolickým odkazem na spustitelný soubor abq610i
v /opt/softwaresname/executables/
.
Hlavní exe abaqus
vyžaduje některé argumenty příkazového řádku. Používám argument cae
, (tj. abaqus cae
), ale s jiným příkazem pro vykreslení grafiky v lepším režimu, takže konečné volání je:XLIB_SKIP_ARGB_VISUALS=1 abaqus cae
Vytvořil jsem alias pro tento dlouhý příkaz v .bash_rc
soubor jako:
alias abaquscae="XLIB_SKIP_ARGB_VISUALS=1 abaqus cae"
Všechno fungovalo perfektně, protože alias spouští software. Protože jsem líný šampion, napadlo mě pro to vytvořit odpalovací zařízení v Káhiře. Zadal jsem tedy abaquscae
v poli „příkaz ke spuštění po kliknutí“ a zaškrtněte „Spustit v terminálu“. K mému zděšení se však po kliknutí na spouštěč zobrazila chyba::
There was an error creating the child process for this terminal
Failed to execute child process "abaquscae" (No such file or directory)
Následně jsem napsal malý soubor bash skriptu „abaquscae.sh“:
#!/bin/sh
"XLIB_SKIP_ARGB_VISUALS=1 abaqus cae"
a uložil, udělal to spustitelným a po spuštění v bash shellu jsem znovu dostal podobnou chybu, tj. :
./abaquscae.sh: 2: ./abaquscae.sh: XLIB_SKIP_ARGB_VISUALS=1 abaqus cae: not found
Teď jsem úplně ztracený, vyzkoušel jsem mnoho triků, např.
1- odstranění čárek ve skriptu bash,
2- vytvoření dos2unix
,
3- pomocí úplné cesty ke spustitelnému souboru
ale tento skript neběží přes bash terminál.
PROBLÉM:
Příkaz (stejně jako jeho alias) funguje v bash terminálu dobře, ale když jsou spuštěny přes nějaký jiný kanál (např. skripty/spouštěče), terminál je žalostně nedokáže rozpoznat 🙁 ..
Pokud má nějaký odborník radu/informaci o tom, jak tento problém vyřešit, podělte se. Budu vám velmi vděčný.
Přijatá odpověď:
Myslím, že skript by měl být takto:
#!/bin/bash
XLIB_SKIP_ARGB_VISUALS=1 /opt/softwaresname/abaqus cae
Spouštěč můžete také vytvořit pomocí následujícího příkazu:
bash -c 'XLIB_SKIP_ARGB_VISUALS=1 /opt/softwaresname/abaqus cae'
Nastavení proměnných prostředí před názvem spustitelného souboru v příkazovém řádku je funkcí shellů CLI (Command Line Interface). Pokud vložíte VARIABLE=value /path/to/executable
ve spouštěči se program, který načte spouštěč (a efektivně spustí spustitelný soubor), pokusí najít soubor s názvem „VARIABLE=value“ a samozřejmě selže.
Tento příkaz spustí bash
, výchozí uživatelský shell v Ubuntu, a řekněte mu, aby se spustil (-c
option) řetězec „XLIB_SKIP_ARGB_VISUALS=1 /opt/softwaresname/abaqus cae“, takže bude interpretován tak, jako když to zadáte do CLI.