Команда используется в другой команде

Установка rlwrap и выполненный rlwrap php5. Rlwrap является универсальной readline оберткой, он обеспечивает выпуск командной строки и историю для любого read-eval-print цикла. Так как это - универсальная обертка, Вы не получите PHP-определенного завершения.

С другой стороны, получите исходный пакет и восстановите его с поддержкой readline. Поддержка Readline была только не учтена из-за лицензирования проблем, но эти проблемы только запрещают распределению PHP5, связанный с readline, они не запрещают Вам использование его.

apt-get source php5-cli
apt-get install build-essential fakeroot
apt-get build-dep php5-cli
cd php5-*/
# Edit debian/rules to configure with readline support
# Add an entry to debian/changelog to remember what you did
dpkg-buildpackage -rfakeroot -us -uc -b -nc

2
13.07.2011, 19:31
3 ответа

Это довольно обычно, некоторые программы основывают свою работу исключительно над этим.

Некоторые более типичные примеры, которые приходят на ум, su, sudo и xterm.

su -c 'ls -l /root'
sudo ls -l root
xterm -e 'top -d 10'

Это отличается от Вашего примера

echo `echo hello`

где обратные кавычки интерпретируются оболочкой, и программа ничего не выполняет самого.

Отметьте также различие между su и sudo. Первое взятие строка, и могла быть трудной настроить такую строку с пользовательской точки зрения, например, развернуть переменную, прежде чем это будет замечено командой; второе серия строки и намного более проста (нет никаких кавычек в sudo пример).

Что они используют для реализации их внутренней работы? Существует по существу два пути: system библиотечная подпрограмма и exec системный вызов. Первое будет называть оболочку и допускать различные расширения оболочки, как

su -c 'ls -ld /root/.*'

в то время как второй метод не позволяет такую свободу.

4
27.01.2020, 21:53

Обратные галочки удерживаются от использования, потому что они едва nestable, и не легко отличенные в различных шрифтах от apostrophs.

Вместо этого используйте $ (cmd), который тривиален:

echo $(echo $(echo $(echo $(echo $(echo hello)))))

И да, это - функция, которая часто требуется, даже если это редко используется.

Но программы, которые обрабатывают команды, но не обязательно вызывают себя снова, являются легионом:

  • оболочки как bash, dash, zsh конечно,
  • все scriptable языки как scala, haskell, ruby, python, lua, perl, php, ...
  • более определенные языки как bc, r, ...
  • sql-интерфейсы как psql -c "SELECT foo FROM bar" sampledb
  • удаленные оболочки как ssh, telnet, ...
2
27.01.2020, 21:53
  • 1
    Спасибо! В примере djvused, который является опцией, сопровождаемой некоторой подкомандой, заключенной в кавычки в одинарной кавычке вместо обратных галочек. –  Tim 13.07.2011, 20:41

Самый превосходный текстовый редактор Vim, и это - предшественник, vi, имейте эту функцию:

Введите!) дата, когда Ваш курсор находится на пустой строке и выводе date команда будет помещена в пустую строку.

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

Снова в Vim, Вы могли поместить свой курсор на первую строку абзаца текста, совершить нападки V, использовать j для потери работоспособности по строке за один раз к последней строке абзаца. Хит! fmt и получают Ваше в текстовом формате в строки меньше чем на 80 столбцов. Vim действительно выделяет маркировку, но вариант был общим приемом на более старом vi, который просто имел метки: b! fmt

Относительно Вас больше технических вопросов, это может быть сделано несколько путей. Стандартный вызов библиотеки C system(3) распространенный способ состоит в том, чтобы выполнить внешнего афериста. Тот стандартный вызов библиотеки может наложить слишком много предположений для того, что Вы хотите сделать, в этом случае, Вы использовали бы fork(2) системный вызов для получения нового процесса, который изменил бы дескрипторы файлов или другие вещи, и затем звонил бы execve(2) системный вызов, чтобы заставить ядро загружать другой исполняемый файл в адресное пространство нового процесса.

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

1
27.01.2020, 21:53

Теги

Похожие вопросы