1

Я пытаюсь написать bash-скрипт для управления настройкой профиля пользователя. Я не могу понять, почему это, если заявление не будет работать. У меня есть код:

#!/bin/bash
#check if programs are installed
( TMUX=$(tmux -V) && echo "tmux at version $TMUX" ) || echo "tmux not installed"
if [ $TMUX != "1.8" ]; then
    echo "installing tmux"
fi

но неважно, что я пытаюсь, я постоянно получаю ошибку

test.sh: line 6: syntax error near unexpected token `fi'
test.sh: line 6: `fi'

Любые идеи относительно того, что может вызвать это?

2 ответа2

5

Если вы запустите tmux -v а tmux не установлен, вы получите ошибку. Присвоение переменной в подоболочке также означает, что она никогда не будет определена снаружи, если не будет экспортирована. Скорее попробуйте и проверьте это с помощью which:

TMUX="$(which tmux > /dev/null && tmux -v)"
if [ "$TMUX" != "1.8" ]; then
    echo "installing tmux"
fi

Сравнение строк с test требует, чтобы вы указали свой аргумент, иначе вы получите ошибку об унарном операторе, ожидаемом от Bash.

4

Из вашего кода видно, что вы устанавливаете значение TMUX в подоболочке, чтобы вы не определяли это значение, когда находитесь в операторе if. Поскольку вы по существу выполняете оператор if с неустановленной переменной, это приведет к синтаксической ошибке. Я не вижу никакой причины для вас иметь подоболочку в первой строке кода. Код будет работать правильно без него.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .