Сценарии языковых оболочек? - PullRequest
1 голос
/ 11 августа 2010

Существуют ли какие-либо программные пакеты или проекты, которые предоставляют оболочки для сценариев? Я знаю, что есть csh для программистов на C, хотя не в том смысле, что это в первую очередь для программирования, а для навигации и системного администрирования. Мне было интересно, есть ли что-то перевернутое для этой цели? То есть пользователь входит в оболочку, предназначенную в основном для программирования, а затем для навигации (что-то вроде irb в ruby, но с возможностями навигации)?

Ответы [ 7 ]

4 голосов
/ 11 августа 2010

Я думаю, что вы дезинформированы, если думаете, что csh (tcsh) для программистов на Си. Это просто оболочка типа bash или ash, или dash, или ksh, или zsh.

Язык R обеспечивает достаточно функциональную внутреннюю среду с возможностью сохранять / восстанавливать «рабочее пространство» (ваши переменные).

Python имеет встроенный интерпретатор, как и Maxima, и некоторые версии Lisp / Scheme, плюс вы уже упомянули irb.

Вы также можете рассматривать vim или emacs как тип оболочки, ориентированной на программиста, о которой вы говорите; и то, и другое можно подключить для запуска команд навигации и ввода информации типа sysadmin, не вынуждая вас покинуть редактор.

Я думаю, что реальный ответ на ваш вопрос - "мощные оболочки предоставляют свой собственный язык сценариев".

1 голос
/ 11 августа 2010

Интерпретатор Tcl, tclsh, действительно создан как оболочка. Фактически, в отличие от Ruby, где интерактивная и неинтерактивная оболочки разделены, tclsh работает так же, как традиционные оболочки, такие как bash: при запуске без сценария он входит в интерактивный режим, но при наличии сценария он входит в пакетный режим.

Но, это отстой, потому что у него нет встроенного readline. Так что нет истории стрелок вверх или завершения табуляции и т. Д. Но вы всегда можете запустить его, используя rlwrap:

rlwrap tclsh

, что должно дать вам возможности readline.

Однако я не был удовлетворен (отчасти потому, что в моей системе в то время не было rlwrap, а отчасти потому, что я хотел еще несколько функций). Итак, я написал свою собственную реализацию истории и завершения табуляции и т. Д. Оформить заказ на мою оригинальную readle-tcl readline или улучшенную Pure-tcl readline2 .

Он действительно действует как интерактивная оболочка, в которой автоматически выполняются внешние исполняемые файлы, если команда tcl неизвестна. И вы даже можете запускать из него интерактивные программы, такие как vi, emacs или lynx. Поскольку он автоматически отступает от выполнения внешних команд, вы можете смешивать tcl и shell как:

foreach x [split [ps aux | grep apache] \n] {
    puts [lindex $x 1]
}

Это замечательно, потому что синтаксис tcl намного более разумный по сравнению с bash и sh (когда-либо пытались выйти из '"\"\\\\"\ цитируя ад в bash?). Мне лично нравится tcl, но tcl - это язык «люби или ненавидь». Людям, которые получают это, действительно нравится это и люди, которые действительно не ненавидят это.

Но даже если вам не совсем нравится синтаксис tcl, я бы посоветовал вам попробовать его для этого конкретного приложения, потому что в отличие от других языков, tcl действительно предназначен для использования скорее в качестве языка команд, чем языка программирования. Прочитайте Не могу поверить, что хвалю Tcl по некоторым причинам.

1 голос
/ 11 августа 2010

Возможно, вы захотите взглянуть на IPython .Это интерактивная оболочка Python (с навигацией по файловой системе наряду с другими приятными функциями), которая также обеспечивает профиль системной оболочки для оптимизации ее поведения при использовании системной оболочки.

1 голос
/ 11 августа 2010

Системная навигация (и административные задачи) - это действительно другое приложение, нежели программирование, и трудно найти единую оболочку, которая хорошо справляется с обеими задачами. Тем не менее, я предполагаю, что вы действительно запрашиваете оболочку, которая

  1. Позволяет легко загружать содержимое файла и манипулировать этим содержимым в процессе работы и с большей ловкостью, чем при использовании bash и стандартных утилит unix.
  2. Кроме того, вам нужно удобство доступа к некоторым обычным командам для перемещения файлов и навигации по файловой системе.

Хорошая новость заключается в том, что стандартные языки сценариев (например, Ruby, Perl) должны были делать # 1 действительно хорошо, и нетрудно написать / найти библиотеку для выполнения # 2 любого из этих языков.

Поскольку Ruby - это то, с чем я знаком, я дам вам более конкретный пример того, как вы могли бы сделать это с помощью Ruby.

Чтобы сделать это в Ruby, вы должны использовать irb (Ruby REPL) и модуль FileUtils, который является частью стандартной библиотеки Ruby.

Для этого запустите irb, затем выполните

require 'fileutils'
include FileUtils

(вы можете поместить это в .irbrc, если хотите, но я не уверен, что рекомендую это.)

это позволяет вам иметь доступ к ряду обычных команд управления файлами через простой синтаксис Ruby. Вы можете самостоятельно запускать другие команды Ruby. Для запуска других команд в вашей системе вам нужно будет вызывать их с помощью system.

FileUtils не включает команду ls, потому что она не предназначена для интерактивного использования, поэтому вам нужно написать свою собственную. Я вообще не знаю, как получить хороший контроль над работой (это не значит, что ты не мог что-то написать).

Единственное, что я предупреждаю вас, это то, что этот рабочий процесс будет очень отличаться от других пользователей UNIX, так что вы можете подумать о том, стоит ли быть таким нонконформистом, или стоит ли строить опыт, который хорошо сочетается со стилем работы других администраторов UNIX. Вероятно, лучше привыкнуть к основным утилитам UNIX и языку сценариев оболочки Bourne. (Вы можете изучить C-Shell, если хотите, но есть хорошо известный FAQ, объясняющий недостатки C-shell для программирования .)

0 голосов
/ 11 августа 2010

Bash имеет множество функций программирования, которые обычно не признаются, например, массивы и опции манипуляции со строками при расширении переменной оболочки. Некоторые оболочки, такие как zsh или ksh, значительно улучшили возможности программирования по сравнению с наиболее распространенными оболочками (а именно bash или tcsh.)

0 голосов
/ 11 августа 2010

Я уверен, что немного поработав, вы могли бы расширить Devel :: REPL (Perl) для предоставления доступа к gnu coreutils,

0 голосов
/ 11 августа 2010

CSH не имеет ничего общего с программированием на C.Он одинаково хорошо выполняет те же функции, что и Bourne Shell, но использует другой синтаксис.

Если вам нужен интерпретатор C, я предлагаю использовать cint, которая является частью ROOT системы CERN.Но имейте в виду, что это ни в коей мере не полезно для системного администрирования и навигации.

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