Например, пока это работает:
$ echo foo Foo
Это не:
$ / bin / sh -c echo foo
Принимая во внимание, что это делает:
$ / bin / sh -c 'echo foo; эхо-бар ' Foo бар
Есть ли объяснение?
shell
command-line
arguments
echo
SilverlightFox
источник
источник
sh -c 'echo $1' echo foo
sh -c 'echo "$@"' fnord a b c d ...
sh -c 'echo $0' foo
это не лучший вариант, учитывая, что спрашивающий уже знает, что/bin/sh -c 'echo foo; echo bar'
работает, вы можете просто ответить, цитируя команду/bin/sh -c 'echo foo'
Это вызывает
echo
с аргументом foo и foo печатается.Это вызывает оболочку с аргументом
echo
и предоставляет foo в качестве аргумента$0
.echo
Выводит новую строку и вы выбросите Foo . Если вы хотите вывести foo , укажите аргумент:или используйте предоставленный аргумент:
В этом примере
Оболочка вызывается с аргументом,
echo foo; echo bar
который выводитисточник
В этой команде:
echo
является двоичным (или встроенной командой) иfoo
является первым аргументом.Вот:
/bin/sh
это двоичный файл, первый аргумент которого является-c
, который сам принимает "командную строку" в качестве параметра. Этоecho
в приведенном выше примере. Тогда есть третий аргумент:foo
это аргумент для/bin/sh
, а не дляecho
. Вот почему в вашем третьем примере:... оба напечатаны. Вы процитировали аргумент. Таким образом: первый аргумент есть
-c
, а параметр этого аргумента'echo foo; echo bar'
интерпретируется как один аргумент; как «командная строка».источник
Структура
sh -c word
выполняет только слово (в оболочке).Добавленные слова означают другие вещи, такие как аргумент ноль, один, два и т. Д .:
чтобы сохранить команду с пробелами в одном слове, необходимо заключить в кавычки:
Итак, это печатает все аргументы:
Примеры
В приведенном вами примере:
/bin/sh -c echo foo
первое слово (после опций) -echo
это то, что выполняется. И эхо без текста будет печатать только новую строку, ничего больше:Вот почему вы получаете пустую строку.
Если вы заключите в кавычки пробел, вы будете выполнять «одно слово» (без пробелов), как это:
Вывод
Сохраните выполненную команду как одно «слово», используя кавычки.
источник