Почему jEdit не работает с командой Unix «открыть»?

Недавно я установил jEdit на свою систему Mac OS 10.6. Я хотел бы иметь возможность запускать jEdit в терминале так же, как и emacs, то есть «emacs FILE.NAME». Мой план состоял в том, чтобы написать скрипт jedit.sh, содержащий...

touch $1
open -a /Applications/jEdit.app $1

... где аргумент - это имя файла. Как ни странно, jEdit открывается, но только с новым файлом по умолчанию, а не с нужным файлом. Если я заменю «jEdit.app» любым другим приложением, скажем, «TextEdit.app», он откроет нужный файл.

Есть что-то, что мне не хватает? Почему jEdit ведет себя не так, как другие приложения, когда используется с командой «открыть», и как я могу обойти это?


person zebraman    schedule 25.08.2010    source источник


Ответы (3)


Прежде всего, «открыть» не является стандартной командой UNIX (я полагаю, что это что-то специфичное для Mac OS X?).

Кроме того, jEdit написан на Java, поэтому я предполагаю, что jEdit.app — это просто оболочка, которая запускает виртуальную машину Java для выполнения jedit.jar (она запускает /path/to/java -jar /path/to/jedit.jar или что-то в этом роде, возможно, с дополнительными параметрами использования памяти и т. д.).

В моей системе Ubuntu сценарий оболочки jedit передает любой файл, который я упомянул в командной строке, и jEdit эффективно использует его, поэтому проблема не в самом приложении jEdit.

Вывод: похоже, что jEdit.app не принимает параметры, которые вы ему даете, чтобы передать их в командную строку java...

В качестве решения попробуйте запустить его как java -jar /path/to/jedit.jar "$@" из вашего скрипта (насколько я знаю, строка touch тоже не нужна).

person JanC    schedule 25.08.2010
comment
Я не знаю jEdit, но, возможно, он не создает новый файл, если ему передается имя несуществующего файла. Тогда потребуется touch. Но я бы сделал это как for x; do [ -e "$x" ] || touch "$x"; done, чтобы не изменять время модификации существующего файла и поддерживать несколько аргументов командной строки. - person Gilles 'SO- stop being evil'; 25.08.2010
comment
Это не вариант. Jedit свяжет новый пустой буфер с файлом. Когда вы сохраните файл, он создаст его в это время. - person Ross Rogers; 25.08.2010

Это работает для меня на jEdit 5.1.0:

touch foo
open -a /Applications/jEdit.app foo
person Jonathan Aquino    schedule 14.01.2014

Перейдите в «Утилиты» > «Глобальные параметры» > «Общие».

Снимите флажок Восстанавливать ранее открытые файлы при запуске (перед этим я убедился, что установлен флажок «Включить имена файлов, указанные в командной строке...»)

Я знаю, это странно, но у меня это сработало (mac os x snow leopard, jedit 4.3.2, java 1.6.0_22)

person roman    schedule 21.10.2010