Mam plik zawierający argumenty wiersza poleceń, które chciałbym przekazać do innego skryptu. Ten plik zawiera element taki jak "param 1" param2 param3
.Argument wiersza polecenia z treści pliku z cytatem
Nazwijmy plik z argumentami test.tmp
i plikiem skryptowym script.sh
.
Jeśli zrobić:
script.sh -p `cat test.tmp` -other_params 1 2 3
script.sh
otrzymuje po p
:
"param
1"
param2
param3
Ale chciałbym:
param 1
param2
param3
Każdy pomysł?
Mała precyzja: załóżmy, że script.sh
nie można modyfikować. Rozwiązanie musi się odbywać w powłoce.
W idealnym świecie, 'test.tmp' powinny być przechowywane w NUL- rozdzielany formularz - składnia * only *, która może przechowywać wszystkie możliwe wartości bez potrzeby analizowania. (Bezpieczne przetwarzanie wycinków powłoki bez podejmowania ryzyka bezpieczeństwa, takiego jak zezwolenie na rozszerzenia, jest zaskakująco trudne - chyba że masz zamiar przekazać zadanie do czegoś takiego jak 'xargs', ale nawet wtedy jego zachowanie nie jest kompatybilne z rzeczywistym bashiem rozbiór gramatyczny zdania). Jeśli masz okazję zachęcić ludzi, którzy napisali 'script.sh' do ponownego rozważenia, sugerowałbym to. –
Sugerowane przez Toma podejście "mapfile-t" jest również rozsądną praktyką, * jeśli * masz gwarancję, że twoje argumenty nigdy nie będą musiały zawierać literalnych znaków nowej linii. –
BTW, zobacz http://mywiki.wooledge.org/BashFAQ/050 i jego linki (np. Na stronach WordSplitting i Arguments), aby dowiedzieć się więcej na temat * dlaczego * zachodzi domyślne zachowanie. –