синтаксическая ошибка при переносе кода с 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. Есть несколько основных команд, которые имеют разные флаги между двумя системами.

Надеюсь это поможет!

Другие вопросы по тегам