Команды test
и cd
встроены в оболочки командной строки: оболочки не выполняют их как внешние программы.Они читают эти команды и обрабатывают их, внося изменения в самой программе оболочки.
Когда вы выполняете программу с system
или подпрограмму из семейства exec
, она создает отдельный процесс, который запускает программу,Отдельный процесс может читать входные данные, записывать выходные данные, изменять файлы и общаться в сети, но он не может изменить вещи внутри процесса, который его создал (за исключением того, что он может отправлять некоторую информацию этому процессу, предоставляя код состояния при выходе из системы).или различными способами межпроцессного взаимодействия).Вот почему cd
нельзя выполнить с system
: отдельный процесс не может изменить рабочий каталог другого процесса.Чтобы выполнить команду cd
, вы должны вызвать chdir
или fchdir
, чтобы изменить рабочий каталог для вашего собственного процесса.
Существует отдельная команда test
, но некоторые оболочки выбираютреализовать его внутренне вместо использования внешней программы.Что касается nano
, я не знаю, почему он не работает для вас.Это работает для меня, когда я использую system("nano")
или system("nano xyz")
.Вам нужно будет предоставить больше информации о конкретной проблеме, с которой вы сталкиваетесь nano
.
Способ, которым ssh
обеспечивает удаленное выполнение команд, заключается в том, что он выполняет процесс оболочки на сервере.Оболочка - это программа, которая читает команды из своего ввода и выполняет их.Некоторые из команд, например cd
, выполняются внутри.Другие команды он выполняет, вызывая внешние программы.Чтобы предоставить аналогичную услугу, вы можете написать свою собственную оболочку или выполнить одну из существующих оболочек.В системах Unix стандартные оболочки могут быть найдены в /bin
с именами, заканчивающимися на sh
, такими как /bin/bash
и /bin/csh
.(Однако не все, оканчивающиеся на sh
, обязательно являются оболочкой.)
Даже если вы выполняете оболочку, для ее правильного выполнения есть ряд деталей, в том числе:
- Обеспечение того, чтобы стандартный ввод, стандартный вывод и стандартные потоки ошибок оболочки были подключены так, как вы хотите.
- Передача требуемой среды и аргументов командной строки в оболочку.