Я следую этому руководству , чтобы правильно запустить Aptana Studio на моем Ubuntu 14.04:
Итак, я установил Oracle JRE и, наконец, создал этот файл run.sh
, который должен выполнить Aptana:
!/bin/bash
export UBUNTU_MENUPROXY=0 /home/andrea/Programmi/Aptana_Studio_3/AptanaStudio3
Проблема в том, что когда я пытаюсь выполнить этот скрипт с моей оболочкой я получаю следующее сообщение об ошибке:
andrea@andrea-virtual-machine:~/Programmi/Aptana_Studio_3$ sudo sh run.sh
run.sh: 1: run.sh: !/bin/bash: not found
run.sh: 3: export: /home/andrea/Programmi/Aptana_Studio_3/AptanaStudio3: bad variable name
Почему? Что мне не хватает? Как я могу исправить эту проблему?
Должен быть #!/bin/bash
. Я также думаю, что у Вас должна быть новая строка в конце export UBUNTU_MENUPROXY=0
.
#!/bin/bash
export UBUNTU_MENUPROXY=0
/home/andrea/Programmi/Aptana_Studio_3/AptanaStudio3
Существует две ошибки. Короче говоря, это - конкретная фиксация, которую я предложил бы (детали следуют):
#!/bin/sh
UBUNTU_MENUPROXY=0 /home/andrea/Programmi/Aptana_Studio_3/AptanaStudio3
Как Shutupsquare говорит, Ваша hashbang строка (технические детали) должна запуститься с a #!
вместо просто !
.
Это вызывает первое из Ваших двух сообщений об ошибках и будет препятствовать тому, чтобы Ваш сценарий был выполнен как ./run.sh
, но не причина, которую Вашему сценарию не удается выполнить AptanaStudio3
(потому что hashbang строка не требуется для sh run.sh
вызов синтаксиса).
Между прочим, когда Вы работаете sh run.sh
, это запускает Ваш скрипт с sh
как интерпретатор. Но с hashbang строкой #!/bin/bash
, выполнение ./run.sh
запустил бы Ваш скрипт с bash
как интерпретатор. Этот сценарий ни в коем случае не зависит от расширенных функций bash
, и в то время как bash
дополнительное использование памяти почти наверняка незначительно для этого приложения, можно все еще хотеть записать hashbang строку так ./run.sh
запускает скрипт с sh
:
#!/bin/sh
export
Основная проблема, которая вызывает Ваше второе сообщение об ошибке и является причиной AptanaStudio3
сбои для выполнения, то, что Вы используете export
неправильно. export
команда не выполняет команды. Таким образом, Ваша команда интерпретируется как сама переменная среды.
export
может установить и экспортировать переменную среды:
export NAME=value
export
может также экспортировать переменную среды (с тем, что ее текущее значение):
export NAME
export
не принимает NAME=value command
или NAME command
синтаксис, как бы то ни было.
Принятие Вашей цели должно выполнить команду /home/andrea/Programmi/Aptana_Studio_3/AptanaStudio3
с UBUNTU_MENUPROXY
переменная определяется и набор к 0
, необходимо просто отбросить слово export
в целом:
UBUNTU_MENUPROXY=0 /home/andrea/Programmi/Aptana_Studio_3/AptanaStudio3
Это - стандартный способ выполнить команду с измененной средой от оболочки.
Цель export
должен экспортировать переменные в среды всех впоследствии запущенных дочерних процессов (т.е. каждая команда, выполненная из Вашего сценария). Так выполнение export UBUNTU_MENUPROXY=0
на его собственной строке, сопровождаемой AptanaStudio3
команда, как Shutupsquare предполагает, будет работать, и иметь тот же эффект и является совершенно хорошим и приемлемым способом сделать это.
Я предпочитаю способ, которым я предложил выше (без export
) потому что:
export
может вызвать беспорядок другим, читающим Ваш сценарий (или себе позже), и поскольку вторичное соображение возможно менее изящно.export
, Вам нужны две команды; с помощью пути без него Вам нужен только один.env
управляйте работами (вид) способ, которым Вы пытались использовать export
Наконец, существует команда, которая принимает NAME=value command
синтаксис. Эта команда env
. Нет никакой причины использовать его в этом сценарии оболочки - его функция, в том основном использовании, состоит в том, чтобы обеспечить (часть) питание оболочки в выполнении команды с измененной средой, и Вы уже имеете ту власть.
Однако при некоторых обстоятельствах, за пределами сценариев оболочки, можно найти, что необходимо установить переменную среды для команды и выполнить ту команду (и сделать те вещи в единственной команде). В контекстах, просто с помощью строки VARIABLE=value command
не поддерживается, можно использовать:
env VARIABLE=value command
Вам не нужно это здесь все же. Все оболочки стиля Границы (например, sh
, dash
, bash
, ksh
, zsh
) поддержка VARIABLE=value command
.