Почему размещение $ (...) или обратных кавычек вокруг команды приводит к тому, что она возвращает ошибку? - PullRequest
0 голосов
/ 06 февраля 2020

Я пытаюсь запустить сценарий для загрузки папки в сценарии bash. команда aws s3 cp $1 s3://$2 --recursive. Однако, если я напишу команду как $(aws s3 cp $1 s3://$2 --recursive) или 'aws s3 cp $1 s3://$2 --recursive', я получу ошибку Completed: command not found, а код возврата будет 127. После того, как я ее уберу, она работает отлично. В чем причина этого?

#!/bin/bash
`aws s3 cp $1 s3://$2 --recursive`

1 Ответ

3 голосов
/ 06 февраля 2020

Это подстановка команд ; вывод команды выполняется так, как если бы она была самой командой.

... поэтому сначала выполняется:

aws s3 cp $1 s3://$2 --recursive

, которая выдает в качестве вывода что-то вроде Completing uploading yadda yadda. Итак, что же заставляет это делать обратный удар? Запустите это сообщение об успехе как команду!

... поэтому следующая команда, которую пытается выполнить оболочка, похожа на:

Completed yadda yadda yadda

... что, конечно, не с:

Completed: command not found

... потому что Completed - это не имя программы, которую вы установили.

Нет смысла использовать синтаксис подстановки команд, когда вы не на самом деле не хочу подставлять результат команды где-то. Не используйте синтаксис, который вы не понимаете, если у вас нет конкретной, объяснимой причины, по которой вы считаете, что он вам нужен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...