Какой путь получить удобство REPL в оболочке Unix? (или наоборот) - PullRequest
2 голосов
/ 20 июля 2011

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

git push
bzr push
apt-get install

Через некоторое время я устаю писать git push, git commit, git что-то ...потому что я знаю, что единственное, что я использую для 'commit', 'push' и т. д., это git на данный момент.

Играя с языками, обеспечивающими REPL (Ruby, Python и т. д.), я былупуская удобство ввода.

$ git pus...           ## arrgh!
$ from git import *
$ push                 ## yes!

Я вижу четкую симметрию между командами, такими как git и пространства имен или модули в вышеупомянутых языках программирования.

Итак, вопрос: что для этого нужноиметь поддержку пространств имен в SHELL?или наоборот, что нужно для того, чтобы эти языки заменили ОБОЛОЧКУ?

1 Ответ

1 голос
/ 20 июля 2011

Это было бы чрезвычайно сложно сделать в общем. Тем не менее, вы можете приблизить что-то подобное ...

#!/usr/bin/env bash

cmd="${1-echo}"

history -r
while read -p"$cmd\$ " -e -r -a input ; do
    history -s -- "${input[@]}"
    "$cmd" "${input[@]}"
done

Вызвать с именем команды, например,

./wrapper apt-get

А теперь, когда вы говорите, например, install foo вы на самом деле выполните apt-get install foo.

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

...