Ваш самый быстрый путь вперед (если Вы не хотите стать экспертом Tcl, который был бы... необычен... в 2009) состоит в том, чтобы, вероятно, использовать autoexpect
. Вот страница справочника:
http://expect.nist.gov/example/autoexpect.man.html
Короче говоря, разожгите autoexpect
, выполните свою ssh сессию, закончите то, что необходимо сделать, прекратите автоожидать и затем победите клавиатуру по получающейся путанице, пока это не работает:) я предполагаю, что Вам не нужны что-то большее чем быстрый взлом для разбираний в ключах и затем, хорошо оно кажется на знание счета уже с этим.
И существует этот вопрос , который уже содержит пример близко к тому, что Вы ищете.
Ответ на этот вопрос зависит от платформы; то, что происходит в Linux, отличается, например, от того, что происходит в Solaris.
Простая часть (поскольку она не зависит от платформы) - это разделение на 'gcc' и 'g ++':
Жесткая часть, поскольку он зависит от платформы, это значение 'CC' (и 'cc').
Однако даже в Solaris это может быть это старый компилятор Си на основе BSD из / usr / ucb
. На практике это обычно не устанавливается, и есть просто заглушка, которая выходит из строя, нанося ущерб тем, кто пытается скомпилировать и установить самоконфигурируемое программное обеспечение.
В HP-UX по умолчанию «cc» по-прежнему K&R- установлен только компилятор C, позволяющий при необходимости повторно связать ядро, и непригоден для работы с современным программным обеспечением, поскольку он не поддерживает стандарт C. Вы должны использовать альтернативные имена компилятора ('acc' IIRC). Точно так же в AIX системный компилятор C имеет такие имена, как «xlc» или «xlc32».
Обычно системный компилятор по умолчанию назывался «cc», и самоконфигурируемое программное обеспечение использует это имя, если оно этого не делает. не знаю, что еще использовать.
POSIX попытался законодательно обойти это, требуя существования программ c89 (изначально), а затем c99; это компиляторы, совместимые со стандартами C. ISO / IEC 9899: 1989 и 9899: 1999. Сомнительно, что POSIX преуспел.
Вопрос касается различий в функциях и библиотеках. Как и прежде, ответ частично зависит от платформы, а отчасти - от общего.
Большой разрыв между компиляторами C и компиляторами C ++. Компиляторы C ++ принимают программы C ++ и не компилируют произвольные программы C. (Хотя можно написать C в подмножестве, которое также понимается C ++, многие программы C не являются допустимыми программами C ++). Точно так же компиляторы C принимают программы C и отклоняют большинство программ C ++ (потому что большинство программ C ++ используют конструкции, недоступные в C).
Набор доступных для использования библиотек зависит от языка. Программы на C ++ обычно могут использовать библиотеки C на данной платформе; Программы на C обычно не могут использовать библиотеки C ++. Итак, C ++ имеет больший набор доступных библиотек.
Обратите внимание, что если вы используете Solaris, объектный код, созданный CC, несовместим с объектным кодом, созданным g ++ - это два отдельных компилятора с отдельными соглашениями для таких вещей, как обработка исключений и изменение имени (и изменение имени намеренно отличается, чтобы гарантировать, что несовместимые объектные файлы не связаны вместе!). Это означает, что если вы хотите использовать библиотеку, скомпилированную с CC, вы должны скомпилировать всю свою программу с CC. Это также означает, что если вы хотите использовать одну библиотеку, скомпилированную с помощью CC, а другую - с помощью g ++, вам не повезло. Вы должны перекомпилировать хотя бы одну из библиотек.
С точки зрения качества сгенерированного ассемблера GCC (GNU Compiler Collection) очень хорошо справляется. Но иногда нативные компиляторы работают немного лучше. Компиляторы Intel имеют более обширные оптимизации, которые еще не были воспроизведены в GCC, Я полагаю. Но любые подобные объяснения опасны, пока мы не знаем, какая платформа вас интересует.
Что касается языковых функций, все компиляторы в целом довольно близки к текущим стандартам (C ++ 98, C ++ 2003, C99 ), но обычно есть небольшие различия между стандартным языком и языком, поддерживаемым компилятором. Поддержка более старого стандарта C89 практически одинакова (и полностью) для всех компиляторов C. Есть различия в темных углах языка. Вам необходимо понимать «неопределенное поведение», «поведение, определяемое системой» и «неопределенное поведение»; если вы вызовете неопределенное поведение, вы получите разные результаты в разное время. Есть также много опций (особенно с GCC) для настройки поведения компилятора.
CC
- переменная среды, относящаяся к системному компилятору C. На что он указывает (доступные библиотеки и т. Д.), Зависит от платформы. Часто он будет указывать на / usr / bin / cc
, фактический компилятор c (драйвер). На платформах Linux CC
почти всегда указывает на / usr / bin / gcc
.
gcc
- это двоичный файл драйвера для коллекции компиляторов GNU. Он может компилировать C, C ++ и, возможно, другие языки; он определяет язык по расширению файла.
g ++
- это двоичный драйвер, подобный gcc
, но с несколькими специальными параметрами, установленными для компиляции C ++. Примечательно (по моему опыту), g ++
по умолчанию связывает libstdc ++, а gcc
- нет.