Есть ли реальная польза от использования по bash -c 'some command'
сравнению с использованиемbash <<< 'some command'
Кажется, они достигают того же эффекта.
bash
here-string
yosefrow
источник
источник
bash -c '...'
будут работать в оболочках, которые не имеют этих строк Вы предполагаете, что bash будет вызываться в оболочке bash, но это не всегда так.Ответы:
bash -c 'some command'
сохраняет доступ к стандартному вводу вызывающей стороны, поэтомуread
чтение команд из стандартного ввода будет работать нормально.bash <<< 'some command'
заменяет этот ввод передаваемой строкой,bash -c cat
иbash <<< cat
делает разные вещи.С другой стороны, вы можете использовать эту функцию, чтобы предоставить свой собственный стандартный ввод, который будет использоваться
$'...'
, если вы очень осторожны:Я бы не хотел на это полагаться, но иногда это было бы удобно.
bash -c
также позволяет передавать аргументы в сценарий и$0
устанавливать:будет установлен
$1
вabc
и$2
кdef
внутреннейsome command
.источник
bash -c
которые упоминают-c
, AFAIK. Не совсем бессмысленно, поскольку это может помочь отследить их.bash <<< 'script'
ошибки выглядят так же, как ошибки в родительском скрипте;bash -c 'script'
те не делают. Вы даже можете пометить ихbash -c 'script' label
.bash <<< 'echo $1' /dev/stdin foo
тоже работает и печатаетfoo
. Хотя настройка$0
несколько более ограничена.bash <<< 'echo "$1"' /dev/stdin foo
не всегда работает Яbash <<< 'echo "$1"' -s foo
должен работать.