Сценарии Bash обрабатываются иначе, чем ввод в терминале? - PullRequest
0 голосов
/ 04 сентября 2010

У меня возникли некоторые проблемы с использованием сценариев bash.Я хочу, чтобы скрипт нашел каталог "Firefox.app", но вещи, которые работают, когда я их набираю в интерпретаторе оболочки, не работают в скрипте.

ffxapp=`find /Applications/ -name "Firefox.app" -print | tee firefox.location`

Когда я набираю это в оболочке, работает ($ffxapp == "/Applications/Firefox.app").В сценарии это не ($ffxapp == "").Я так растерялся.

Ответы [ 2 ]

2 голосов
/ 11 сентября 2010

Позвольте мне включить мой телепатический режим.Наиболее вероятная причина вашей проблемы заключается в том, что вы назначаете переменную в сценарии и ожидаете, что она появится в вашей оболочке, когда вы проверяете ее.Однако, когда скрипт запускается оболочкой, он создает вложенную оболочку, поэтому все объявленные там переменные не отображаются в среде родительской оболочки.Если вы хотите экспортировать переменную из сценария, вы должны явно указать bash запустить ее в той же оболочке.Хорошо, слишком много слов, вот пример:

#!/bin/bash

FOO=bar

Когда вы запустите этот скрипт, переменная FOO не появится в вашей оболочке, даже если вы используете "export":

$ cat test.sh 
#!/bin/bash

FOO=bar

$ ./test.sh 
$ echo $FOO

$ 

Но если вы запустите его с помощью команды «source», он будет работать:

$ source ./test.sh 
$ echo $FOO
bar
$ 

Надеюсь, это поможет:)

0 голосов
/ 11 сентября 2010

Добавление к ответу Влада, добавив echo $FOO в сценарий, вы можете увидеть значение там, когда сценарий запущен, но пропал после завершения сценария:

$ cat test.sh
#!/bin/bash

FOO=bar
echo $FOO

$ ./test.sh
bar
$ echo $FOO

$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...