В чем разница между «sh -c cmd» и «cmd», если выполняется из строки commnad оболочки и при выполнении из функции c exec(), соответственно? Благодарю.Разница между «sh -c cmd» и просто «cmd»?
ответ
От человека странице:
-c строка Если опция -c присутствует, то команды считываются из строки. Если после строки есть аргументы, они назначаются позиционным параметрам, начиная с $ 0.
Только cmd
будет проходить через bash (или что-то другое, что по умолчанию). Вам нужно, чтобы sh явно вызывал аргумент -c.
Экспресс не должен здесь меняться.
Это зависит от того, что представляет собой «cmd
». В базовом случае, когда это простое имя команды (например, ps
или ls
), тогда нет никакой разницы в командной строке оболочки и очень мало различий при выполнении execvp()
. Функции «non-p» exec*()
имеют немного отличающуюся семантику; они не используют переменную PATH, поэтому команда должна существовать и быть исполняемой в текущем каталоге, иначе она завершится с ошибкой.
Однако, если cmd
является более сложным, то это может иметь большое значение. Например:
$ echo $$
17429
$ sh -c 'echo $$'
76322
$ sh -c "echo $$"
17429
$
Первый сообщает идентификатор процесса исходной оболочки; второй сообщает идентификатор процесса оболочки как sh
; третий - дорогой способ сообщить идентификатор процесса исходной оболочки. Обратите внимание, что одиночные кавычки и двойные кавычки также значительны. Здесь котировки не будет присутствовать в C вызова (оболочка удаляет кавычки из разных аргументов), а значение $$
будет то, что ребенка оболочки:
char *argv[] = { "sh", "-c", "echo $$", 0 };
execvp(argv[0], argv);
(я сказал, что котировки не присутствуют в вызове C, они необходимы вокруг строки в коде C, но значение, переданное в sh
, не содержит кавычек - поэтому я имел в виду то, что я сказал, хотя это может быть не столь ослепительно очевидным, как все это .)
- 1. Xcode: разница между BACKSPACE + CMD и BACKSPACE?
- 2. Docker `CMD a b c` VS` CMD ["a", "b", "c"] `
- 3. Разница между #!/Bin/sh и #:/bin/sh
- 4. Разница между sh и sh -c в unix
- 5. разница между разговором и Cmd/с в окнах партии
- 6. cmd: regedit from cmd
- 7. В чем разница между командной строкой и cmd?
- 8. В чем разница между cmd и idle при использовании tqdm?
- 9. Разница между cmd и точкой входа в док-файл
- 10. Разница между сценариями Unix/cmd и скриптами python
- 11. Разница Java между бежит от netbeans и cmd
- 12. Cmd и C# удалить файл
- 13. Strip CMD output, чтобы просто показывать каталоги
- 14. CMD Script: Как закрыть CMD
- 15. Отслеживание файлов .py, .sh и .cmd в Sourcetree
- 16. разница между extern «C» и просто extern
- 17. Нужно ли мне «cmd/c»?
- 18. CMD вместо запуска команды просто открывает его
- 19. Сохранить cmd в C#
- 20. ткань разница Судо() бежать («Судо CMD»)
- 21. Команды Cmd в C#
- 22. cmd/C set variable
- 23. C# выполнить команды cmd
- 24. команды CMD на C#
- 25. Что означает cmd/C?
- 26. C# CMD Ping метка
- 27. Команда cmd в C#
- 28. CMD на C# переводил
- 29. shell cmd transfair windows cmd
- 30. ProcessBuilder и CMD
Другим примером является 'cd' vs' sh -c cd'. Первый изменяет текущий каталог на дом, а второй ничего не делает. – tom
@tom: действительно, с дополнительным усложнением, что для выполнения функций 'exec * Подобные комментарии относятся к другим встроенным функциям оболочки - 'exit',' jobs', ... –