LINUX.ORG.RU

как передать строку скрипту из цикла?

 


0

3

Допустим в скрипте есть "$1", который захватывает строку с пробелами, поданную в качестве аргумента, если просто запустить скрипт. Но если будет конструкция, например: ls | while read i; do ./script $i; done, то аргумент захватывается только до пробела. Как сделать, чтобы этого не было.

Вообще, хотелось бы универсального какого-то решения, чтобы не приходилось ломать голову в каких случаях что и как надо экранировать и передавать. Достали уже эти головоломки, если честно.

DEPENDENCY_CINCLUDES="<stdlib.h> <stdio.h>"

...

    if [ ! -z "$DEPENDENCY_CINCLUDES" ]
    then
        DEPENDENCY_CINCLUDES_LIST=( $DEPENDENCY_CINCLUDES )

        for DEPENDENCY_CINCLUDES_SINGLE in ${DEPENDENCY_CINCLUDES_LIST[@]};
        do
            echo "#include $DEPENDENCY_CINCLUDES_SINGLE" >> $FILE_TARGET
        done

        echo >> $FILE_TARGET
    fi

...
#include <stdlib.h>
#include <stdio.h>

Оно?

PPP328 ★★★★★
()
Ответ на: комментарий от PPP328

Я имел в виду без этих костылей. Чет мне это не нравится.

linearisation
() автор топика
ls | while read i; do ./script "$i"; done
Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от dexpl

ls в скриптах не нужен

Кстати, недавно добавили такую ерунду, что для файлв с пробелами ls будет выводить имена в кавычках. Что разу ломает скрипты, которые опираются на ls.
Убирается параметром --quoting-style=literal. Но плюсую find.

ls в скриптах не нужен: find . -exec ./script '{}' \;

А здесь бага состоит в том, что оно пойдет по всем поддиректориям. Что явно не эквивалентно ls. Поэтому -maxdepth 1.

А еще find выводит каталоги. Как и ls. Что наверняка не то, что ожидается. Поэтому -type f.

Так что ТС'а еще долго будут «доставать головоломки» (C)

Kroz ★★★★★
()
Ответ на: комментарий от Kroz

Да, кавычки забыл. Так решает: for file in *; do ./script "$file"; done;

mogwai ★★★★★
()

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

Learning the bash Shell в первых главах популярно объяснена логика работы интерпретатора. На лоре даже тема была о распродаже.

mogwai ★★★★★
()

Вообще, хотелось бы универсального какого-то решения, чтобы не приходилось ломать голову в каких случаях что и как надо экранировать

Другой язык программирования, отличный от шелла в котором нужно расставлять скобки и запятые, а литералы обязательно заключать в кавычки. Но там свои заморочки. А в шелле это расплата, за упрощение.

surefire ★★★
()

Вообще, хотелось бы универсального какого-то решения

Нужна кнопка «сделать зашибись»?

DELIRIUM ☆☆☆☆☆
()

Выхлоп ls не парсят. Так чисто к сведению. Следует использовать glob или find -print0.

d_a ★★★★★
()

чтобы не приходилось ломать голову в каких случаях что и как надо экранировать

Дело в том, что авторы гуёвых файловых менеджеров/диалогов не очень понимают, зачем кому-то может понадобиться обрабатывать файлы в шелах, авторы которых решили использовать в синтаксисе пробел(или любой другой символ - была бы та же проблема). По правде, разделитель в программах, наверное, самый частый символ, т.ч. пробел - логичный выбор. А в именах файлов - нет. Получается, гуёвики проявили жлобство, им ничего не стоило заменить пробелы чем-то не таким полезным другим людям. Но реальность именно такова, как на самом деле.

Единственный спсоб избавиться от этой проблемы раз и навсегда - исправить операционную систему, чтобы пробелы в именах приводили к чему-то необычному. То-то все удивятся!

DonkeyHot ★★★★★
()
Последнее исправление: DonkeyHot (всего исправлений: 1)

«$1», который захватывает строку с пробелами, поданную в качестве аргумента
хотелось бы универсального какого-то решения, чтобы не приходилось ломать голову

передавать список аргументов, внезапно

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.