Автор Гілка: Програмування в bash  (Прочитано 4772 раз)

Відсутній NeurOtoxyne

  • Новачок
  • *
  • дописів: 2
  • Карма: +0/-0
  • I Love YaBB 2!
Програмування в bash
« : 2007-03-07 11:56:36 »
Допоможiть шановнi добродii

Е такий скрипт на bash'i

#!/bin/bash
        
for i in $( ls ); do      
 exec "./"$i
done

та файли з правом виконання в тiй же тецi що й файл з цим скриптом
так от, якщо замiсть exec поставити echo, то скрипт працюе i виводить список файлiв у тецi

а я хочу щоб в циклi вони виконувались

файли названi

1.rc_щось_там
2.rc_щось_там
i т.д.
але виконуеться тiльки перший файл i в скрипт що його визивае не повертаеться щоб виконати наступний.

Чи можливо таке на bash взвгалi?

Дякую за допомогу.

zzandy

  • Гість
Re: Програмування в bash
« Відповідей #1 : 2007-03-07 12:32:24 »
Я не спеціаліст, але написав би

for i in *rc*
do
      . "$i"
done

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
Re: Програмування в bash
« Відповідей #2 : 2007-03-07 14:38:42 »
1. eval "./${i}"
2. $( ls ) не працює на імненах з пробілами.
3. Пам'ятайте про рекурсію.

zzandy

  • Гість
Re: Програмування в bash
« Відповідей #3 : 2007-03-07 16:00:46 »
Поясніть мені у двох словах, навіщо писати $(ls), якщо ми у баші, який може сам читати файли?

[size=9]Вибачте, мав на увазі "може читати списки файлів"[/size]
« Змінено: 2007-03-07 16:33:20 від zzandy »

Praporshic

  • Гість
Re: Програмування в bash
« Відповідей #4 : 2007-03-07 16:11:39 »
Не знаю як воно краще та правильніше, але я завжди у подібному випадку роблю in `ls`  :-/

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
Re: Програмування в bash
« Відповідей #5 : 2007-03-07 20:18:47 »
Поясніть мені у двох словах, навіщо писати $(ls), якщо ми у баші, який може сам читати файли?
А хто казав, що так треба писати? :)
Я тільки попередив про помічені мною недоліки в скрипті

Praporshic

  • Гість
Re: Програмування в bash
« Відповідей #6 : 2007-03-07 20:43:58 »
Справді, трохи помилився. Достатньо in ./*
Якщо in `ls`, то там щось накшталт `ls | grep ...... | cut | sort` ну й так далі.

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
Re: Програмування в bash
« Відповідей #7 : 2007-03-07 21:40:53 »
Якщо in `ls`, то там щось накшталт `ls | grep ...... | cut | sort` ну й так далі.
еге, ось кавалок з подібною задачею ;)
any_regext=".*/\${2:-.*}\..*"
any_vaults=( "." )
#* get_file назва_типу регексп_імені - шукає шнягу з частиною ім'я 2 типу 1
get_file ()
{
local list="${1:?}" regext="${1:?}_regext"
        eval "list=( $( eval "find -P \"\${${list}_vaults[@]}\" \
                -type f \
                -iregex \"${!regext}\" \
                -printf '\"%h/%f\"\n'" ) )"
# Тепер у нас є масив з іменами
        # ...
}
Ось тільки зараз вже не пам'ятаю, як воно працює...
Хоча для ls можна обійтися
old_ifs="${IFS}"
IFS=$'\n'
for i in $(ls -1) ; do
        IFS="${old_ifs}"
        ...
        IFS=$'\n'
done
IFS="${old_ifs}"
unset -v old_ifs
:)
P.S. Вай, наоффтопив...

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3744
  • Карма: +9/-0
  • Програміст
Re: Програмування в bash
« Відповідей #8 : 2007-03-09 21:59:20 »
Допоможiть шановнi добродii

Е такий скрипт на bash'i

#!/bin/bash
        
for i in $( ls ); do      
 exec "./"$i
done

та файли з правом виконання в тiй же тецi що й файл з цим скриптом
так от, якщо замiсть exec поставити echo, то скрипт працюе i виводить список файлiв у тецi

а я хочу щоб в циклi вони виконувались

файли названi

1.rc_щось_там
2.rc_щось_там
i т.д.
але виконуеться тiльки перший файл i в скрипт що його визивае не повертаеться щоб виконати наступний.

Чи можливо таке на bash взвгалi?

Дякую за допомогу.

Я, напр., для виконання всіх тестів у каталозі кладу туди такий скриптик:
#!/bin/bash
SRC_DIR="`basename "$0"`"
for I in "$SRC_DIR"/test-*.sh
do
  "$I"
done

Ваш скрипт не працює тому що команда exec підміняє процес який виконав цю команду на новий процес. Ця команда, у випадку успіху, не повертає керування просто тому що немає куди - процес уже знищений і замінений на новий з таким самим PID.
[Fedora Linux]

Відсутній NeurOtoxyne

  • Новачок
  • *
  • дописів: 2
  • Карма: +0/-0
  • I Love YaBB 2!
Re: Програмування в bash
« Відповідей #9 : 2007-03-13 15:37:07 »
Дякую .... :D
« Змінено: 2007-03-13 15:52:19 від NeurOtoxyne »