В чем разница между инструментами доступа к оболочке Linux и Windows?
В некоторых языках программирования (из моего опыта - веб-языки), когда нужно выполнить какую-то команду - нужно указать путь к cmd.exe в Windows, а в Linux сразу попадаешь в оболочку... В чем и почему разница? Что именно языки нажимают в обеих системах, когда вы запускаете какую-то os.execute()
команду?
EDIT: Это скорее теоретический вопрос и не связан с практикой программирования. Я понимаю, что это может быть не так просто объяснить тему, поэтому ссылка или указание правильного направления для копания тоже сработает.
Вот один из примеров в Coldfusion (который, я бы сказал, очень странный):
<cfexecute name="C:\Windows\System32\cmd.exe" arguments="echo Hm" />
решение1
Ну, я постараюсь быть проще (широкая тема)
Разница между Windows и Linux очевидна, ядро разное, я не буду углубляться в историю (почитайте Википедию, если вам интересно ;), но Linux, как правило, предпочитает скрипты, потому что они позволяют пользователю настраивать установку или ОС по своему усмотрению, Windows использует .exe, который изменяет ключ реестра для запуска программы.
Что касается того, почему вам нужно вводить весь путь для запуска exe-файла Windows, то тут все довольно просто (я не буду вдаваться в глубокие и скучные объяснения): Windows на самом деле не использует глобальные переменные (простое объяснение: ключу реестра это на самом деле не нужно для работы exe-файла), в то время как Linux, как правило, любит глобальные переменные, на самом деле вы можете легко добавить глобальные переменные в Linux, которые будут указывать на ваш скрипт.
Итак, когда вы хотите запустить скрипт linux, вы вводите cmd (указывая на глобальную переменную, содержащую путь), и затем происходит магия. Для windons вы являетесь глобальной переменной, поэтому вам нужно определить путь к exe-файлу для запуска. Вы можете создать свою собственную глобальную переменную в windows и использовать ее как linux, если хотите, но лично мне не нравится так делать.
Надеюсь, вы теперь лучше понимаете этот принцип.
решение2
Это совершенно разные платформы, и большинство команд, выполняемых через их соответствующие оболочки, будут несовместимы, за исключениемCygwinв Windows, которая использует те же команды, что и оболочка Linux.
Как правило, следует по возможности избегать использования вызовов, специфичных для ОС.
решение3
Изнутри Python я могу сказать:
>>> rc = os.system('echo yes')
yes
>>>
Это будет работать одинаково в Windows, Linux или любой версии Unix.
Я думаю, что наблюдаемое вами явление характерно для переносимости рассматриваемого языка.
И обратите внимание, что подмножество командных строк, которые дадут идентичные результаты, очень ограничено. У Windows и Unix очень мало общих команд.