Как передать команду Unix с пробелами в сценарий оболочки - PullRequest
0 голосов
/ 08 февраля 2019

C # программа вызывает скрипт оболочки с одним аргументом.Аргументом является команда unix:

port="/dev/ttyUSB0";
procStartInfo = new ProcessStartInfo("sudo", "sh test.sh " + 
"$(udevadm info - a - n " + port + " | grep '{serial}' | head - 
n1)");

Мой сценарий оболочки: test.sh :

echo $@

Он печатает указанную выше команду:

$(udevadm info - a - n /dev/ttyUSB0 | grep '{serial}' | head - n1)

но не ожидаемый результат.

Пожалуйста, помогите.Как запустить эту команду

1 Ответ

0 голосов
/ 09 февраля 2019

Вы можете позвонить sh -c "COMMAND".COMMAND может быть каналом и поддерживает все виды перенаправления.Это работает как ввод КОМАНДЫ в командной строке оболочки.Вам нужно только сбежать " на \".Также $ внутри одинарных кавычек необходимо экранировать.

sh -c 'COMMAND' (одинарные кавычки около COMMAND) - альтернатива, если не использовать одинарную кавычку в COMMAND и вы не хотите расширять$.

кстати, используйте $@ всегда в двойных кавычках "$@".В противном случае слово разделяется на пробелы.

...