#function repeat
repeat()
{
shift
let b="$@"
for i in {1..b} ; do echo Date starting `date` ; echo Before waiting `date`; sleep 6 ; echo Done waiting `date` ; "$@" ; done
}
В первый раз, когда я пытался использовать эту функцию, она работала великолепно, затем за прошедшие несколько дней, она работала 2 раза затем своя работа только однажды теперь
$ repeat 7 ls
вывод раньше показывал в 7 раз ранее, затем он показал его только дважды, теперь его проявление вывода только однажды.
Сообщите мне, какая ошибка находится там в сценарии, который никогда не изменялся с первого дня.
Вы не указывали для того, какая оболочка является предназначенным сценарием. Я предположу, что это - Bash.
Ваша функция repeat
определяется как (скопированный здесь с Вашего сообщения):
repeat()
{
shift
let b="$@"
for i in {1..b} ; do echo Date starting date ; echo Before waiting date; sleep 6 ; echo Done waiting date ; "$@" ; done
}
Вы называете его с repeat 7 ls
. Так $1
7
и $2
ls
. Функция выполняется:
shift
Это выбрасывает $1
, $1
становится ls
, $2
сброшен и $#
1.
let b="$@"
b
установлен на ls
.
for i in {1..b} ; do
Цикл будет выполняться однажды с i
набор к {1..b}
. (Похоже, что Вы хотели попытаться генерировать некоторые числа с помощью расширения фигурной скобки; возможно, {1..6}
который выглядит весьма схожим?)
echo Date starting date
echo Before waiting date
sleep 6
echo Done waiting date ;
Дисплей Date starting date
, Before waiting date
, ожидайте 6 секунд и наконец отобразитесь Done waiting date
. Возможно, Вы хотели `date`
вместо этого?
"$@"
$1
ls
и $#
1; это выполняется ls
.
done
Конец for
цикл.
В целом функция будет отображать сообщение, ожидать 6 секунд, отображать другое сообщение, затем выполнить команду, имя которой $2
, возможно передача $3
... как аргументы команде. $1
не используется.
(Я не прокомментирую подтверждение, что в прошлом эта функция раньше делала что-то еще.)
Рабочее функциональное определение было бы:
repeat()
{
local n i
n="$1"
shift
for ((i = 1; i <= "$n"; ++i)); do
echo
"$@"
done
}
Например:
$ repeat 3 ls -F
Calibre/ Documents/ Music/ Public/ Temp/ Videos/
Desktop/ Downloads/ Pictures/ System/ Templates/ examples.desktop
Calibre/ Documents/ Music/ Public/ Temp/ Videos/
Desktop/ Downloads/ Pictures/ System/ Templates/ examples.desktop
Calibre/ Documents/ Music/ Public/ Temp/ Videos/
Desktop/ Downloads/ Pictures/ System/ Templates/ examples.desktop
Поскольку производство использует некоторую проверку ошибок, вероятно, придется добавить (существует по крайней мере два аргумента, первым аргументом является число, и т.д.).