2012-05-30 3 views
1

В моей .bashrc У меня есть следующий кодПочему я получаю сообщение об ошибке, когда использую `uname` в моем .bashrc?

if [`uname` == "Linux"]; then 
    echo "It worked" 
else 
    echo "It didn't work" 
fi 

Но когда я источник моего .bashrc Я получаю следующие результаты

[Linux: команда не найдена

Это не работа

Странно, [ - не опечатка, это часть ошибки. Если я прокомментирую инструкцию if, ошибка исчезнет, ​​поэтому я уверен, что она является источником ошибки. Плюс, если я изменю Linux на linux, тогда ошибка также изменится и на нижний регистр.

И если я эхо-неузнаю, я получаю Linux.

Чтобы исправить мой .bashrc, я использовал source .bashrc, а также начал новый сеанс bash, набрав bash на терминале командной строки.

Я не думаю, что было сложно проверить тип ОС, но я не могу понять правильный синтаксис для .bashrc.

Я не вижу, что я делаю неправильно, может ли кто-нибудь помочь?

ответ

9

Вы забыли пробел после квадратных скобок. Первая строка должна выглядеть следующим образом:

if [ `uname` == "Linux" ]; then 

В вашей версии, без пробелов, то [ и выход uname объединяется в один исполняемый файл с именем [Linux, который не существует в PATH.

+0

Глупо меня. Спасибо, я должен был это понять. – Fred

+0

+1 для ответа на подразумеваемый вопрос OP о «почему», а не только для отображения правильного синтаксиса. Единственное, что я бы изменил, это то, что Баш не говорит, что '[Linux' не существует; он говорит, что он не найден в PATH. Тонкое различие, но, возможно, важное для кого-то, кроме ОП. –

+0

@CodeGnome спасибо за комментарий. Я починил это. –

4

Bash in finicky о расстоянии. Вам нужны свободные места в Вашем условном положении

if [ `uname` == "Linux" ]; then 
    echo "It worked" 
else 
    echo "It didn't work" 
fi