синтаксическая ошибка при переносе кода с Mac на Linux-машину
У меня есть этот код, который я написал для выполнения на моей удаленной машине Linux для некоторых повторяющихся экспериментов с разными входными данными.
#!/bin/bash
#timeout 10m
trap "exit 1" INT
repeat() {
executiontime=$( /usr/bin/time /home/me/optimathsat-1.5.1-macos-64-bit/bin/optimathsat < file.smt2 2>&1 >/dev/null)
echo "$executiontime">>results.csv
}
export -f repeat
for length in 30 ; do
step=0.05
short=0 #0
long=1
for i in {1..10}; do
ratio=0
for j in {1..10}; do
declare -a listofresults
echo "$length $short $long $ratio">>results.csv
python3 main.py "$length" "$short" "$long" "$ratio">file.smt2
chmod 775 file.smt2
declare total=0
declare m=0
parallel -n0 repeat ::: {1..10}
ratio=$(echo "scale=10; ($ratio) + ($step)" | bc)
done
short=$(echo "scale=10; ($short) + ($step)" | bc)
long=$(echo "scale=10; ($long) - ($step)" | bc)
done
done
trap - INT
Я выполнил этот код на своем собственном компьютере Mac, и он сработал (используя gtime вместо /usr/bin/time), но теперь я получаю эту ошибку, которую я не знаю, что это означает /
0inputs+0outputs (0major+66minor)pagefaults 0swaps
/home/me/optimathsat-1.5.1-macos-64-bit/bin/optimathsat: 1: /home/project/optimathsat-1.5.1-macos-64-bit/bin/optimathsat:
Syntax error: word unexpected (expecting ")")
когда я пытаюсь выполнить инструкции вручную, я получаю следующее:
src$ python3 main.py 10 0.5 0.5 0.5>file.smt2
Проверил file.smt2 и все как должно быть, потом такое бывает
src$ /home/project/optimathsat-1.5.1-macos-64-bit/bin/optimathsat < file.smt2
-bash: /home/project/optimathsat-1.5.1-macos-64-bit/bin/optimathsat: cannot execute binary file: Exec format error
1 ответ
- Можно начать с отладки со следом,
$ bash -x myscript.sh
. Он покажет, какая строка вызывает ошибку. См. Руководство по проекту документации Linux. - Мне всегда кажется, что macOS нечувствителен к регистру, хотя и сохраняет регистр. То есть я могу
echo "Hello" > foo; cat Foo
в macOS, но не в Linux. - macOS основан на BSD, а не на Linux. Есть несколько основных команд, которые имеют разные флаги между двумя системами.
Надеюсь это поможет!