Много XRUN в Jack

Хорошо, теперь, когда вы отредактировали свой вопрос, я думаю, что знаю, что происходит на самом деле.

Предположим, у меня есть каталог (~/dir), содержащий несколько файлов, и текстовый файл (~/file.txt), содержащий несколько имен файлов:

$ ls ~/dir
1.txt  2.txt  3.txt  4.txt  5.txt
$ cat ~/file.txt
1.txt
2.txt
3.txt
4.txt
5.txt

Насколько я знаю, ваш скрипт читает содержимое ~/file.txtи проверяет, существуют ли эти файлы (1.txt, 2.txtи т. д. )внутри ~/dir.

Но при запуске скрипта:

$ script.sh ~/dir ~/file.txt
/home/user/bin/script.sh: line 11: [: -eq: unary operator expected
All files present

Итак, что происходит? Посмотрите на этот фрагмент кода:

if [ ! -f "${1}/${file}" ]; # $1 is a path 
then 
    echo "$file is missing" 
    notok=$? 
fi

Основным недостатком здесь является то, что если содержимое как ~/dir, так и ~/file.txtсовпадает, echo "$file is missing"; notok=$?никогда не выполняется. Затем, если переменная notokне имеет значения, [ ${notok} -eq 0 ]терпит неудачу, потому что ${notok}расширяется до нуля (, как многие из нас подозревали ).

Этот недостаток не единственный, но именно он является причиной появления ошибки [: -eq: unary operator expected.

Как решить?

Если вы не хотите переписывать свой скрипт, просто инициализируйте notokпеременную любым числом, отличным от0перед вашим основным кодом. Например:

notok='1'

for file in `cat ${2}` #$2 is file.txt 
do 
    if [ ! -f "${1}/${file}" ]; # $1 is a path 
    then 
        echo "$file is missing" 
        notok=$? 
    fi 
done 
if [ ${notok} -eq 0 ]; 
then 
    echo "need to check" 
    exit 1 
else 
    echo "All files present" 
fi

Работает:

# When the content of ~/dir and ~/file.txt matches
$ ls ~/dir
1.txt  2.txt  3.txt  4.txt  5.txt
$ cat ~/file.txt
1.txt
2.txt
3.txt
4.txt
5.txt
$ script.sh ~/dir ~/file.txt
All files present

# When the content of ~/dir and ~/file.txt does not match
$ ls ~/dir
1.txt  2.txt  3.txt  4.txt  5.txt
$ cat ~/file.txt
foo
1.txt
2.txt
3.txt
4.txt
5.txt
$ script.sh ~/dir ~/file.txt
foo is missing
need to check

Но если бы мне пришлось переписывать сценарий, я бы сделал что-то вроде этого:

# Initialize variables
# It's possible to parse arguments like `-d DIR -f FILE` but let's keep simple
dir="${1}"
txt="${2}"
missing='0'

# Don't read lines with for!
while IFS='' read -r 'file'; do
  if [ ! -f "${dir}/${file}" ]; then
    echo "Missing file: ${file}"
    # Use a simple counter instead of catch the exit code of `echo`
    missing=$(( missing + 1 ))
  fi
done < "${txt}"

if [ "${missing}" -gt '0' ]; then
  echo "Total: ${missing}"
  exit '1'
else
  echo 'All files are present'
fi
0
30.12.2019, 14:11
1 ответ

Это работает, когда я увеличиваю частоту дискретизации. Сейчас я установил его на 88200, и он работает очень хорошо без XRUN и заиканий.

Вы можете сделать это в QJackCtl вSetup...->Settings->Parameters

2
28.01.2020, 02:58

Теги

Похожие вопросы