Я хочу выполнить команду типа:
command argument --parameter=param1,param2,param3
где param1, param2, param3 могут быть любым количеством параметров из файла params.txt, каждый на одной строке.
Я могу создать правильный список параметров с помощью
echo $(cat common.modules) | tr " " ","
Но попытка
command argument --parameter=$(cat params.txt) | tr " " ","
и его очевидные варианты терпят неудачу, вероятно, потому, что я не могу заставить работать что-то вроде этого:
echo $($(cat params.txt) | tr " " ",")
Любая помощь будет высоко оценена.
решение1
Давайте рассмотрим эту команду из вопроса:
command argument --parameter=$(cat params.txt) | tr " " ","
Это запускает команду command argument --parameter=$(cat params.txt)
и передает ее вывод в tr " " ","
. Это не то, что вам было нужно.
Пытаться:
command argument --parameter="$(echo $(cat params.txt) | tr " " "," )"
Здесь, echo $(cat params.txt)
вызывает разбиение слов на содержимое params.txt
. Это приводит к тому, что все параметры разделяются пробелами. Затем, tr " " ","
заменяет пробелы запятыми.
Обратите внимание, что при использовании cat
выше мы поддерживаем совместимость с POSIX. Это означает, например, что эта команда будет работать в оболочке по умолчанию, /bin/sh
, в Ubuntu и Debian и подобных системах.
решение2
Как насчет
command argument --parameter=$(tr '\n' ',' < params.txt)