OSTRAJava
OSTRAJava copied to clipboard
Program nelze spustit mimo adresář z gitu
Mám na PC složku, ve které mám soubor CURRENT.cyp
s OSTRAJava programem. Složku staženou z githubu jsem si dal do /usr/lib/OSTRAJava
, aby byla přístupná odkudkoliv. Na kompilaci jsem si vytvořil jednoduchý skript:
#!/bin/sh
clear
echo "\n\n\nKompiluji..."
cesta=$(pwd)
cd /usr/bin/OSTRAJava/
./ostrajavac -d "$cesta/" "$cesta/CURRENT.cyp" "$cesta/znaky.txt"
echo "Spouštím..."
./ostrajava "$cesta/"
Ve složce $cesta mám soubor, ze kterého chcu, aby OJ četla. Problém je, že program ostrajava
sice spouští program ve složce $cesta, ale spouští ho z adresáře /usr/bin/OSTRAJava/
. A program $cesta tudíž na soubor v adresáři $cesta nevidí.
Mohl bych příkaz ./ostrajava "$cesta/"
nahradit příkazy cd "$cesta"
a /usr/lib/OSTRAJava/ostrajava .
, jenže program ostrajava
má očividně nějaké podivné závislosti.
Jak to mám vyřešit? Nesouvisí s tímto problémem trochu toto? Děkuji
Tl;dr Relativní cesty v programu se nepočítají od místa, kde daný program je, ale od místa, kde je stažený OJ interpreter.
Měl jsem stejný problém, napsal jsem script co to řeší
#!/bin/bash
#načti cesty
in_dir=$(pwd)
out_dir=$(pwd)/out
#pokud out dir existuje tak ho vyčisti
if [[ -d $out_dir ]]
then
rm -R $out_dir
fi
#vytvoř znova out dir
mkdir $out_dir
#přesuň se do adresáře OstraJavy
cd $(dirname "$(readlink -f "$0")")
#zkompiluj
ostrajavac $in_dir -d $out_dir
#spust
ostrajava -h 1024 -f 256 -s 128 $out_dir "$@"
#přesuň zpět
cd $in_dir