OSTRAJava icon indicating copy to clipboard operation
OSTRAJava copied to clipboard

Program nelze spustit mimo adresář z gitu

Open ghost opened this issue 3 years ago • 2 comments

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

ghost avatar May 26 '21 17:05 ghost

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.

ghost avatar May 28 '21 05:05 ghost

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

Binto86 avatar Jun 26 '22 11:06 Binto86