Вопрос или проблема
Я только что заметил, что тот же код для for loop
в bash не работает в FreeBSD
wolf@linux:~$ echo $SHELL
/bin/bash
wolf@linux:~$
wolf@linux:~$ for i in {1..3}; do echo $i; done
1
2
3
wolf@linux:~$
Есть ли альтернатива этому?
[2.5.0-RELEASE][admin@pfSense]/root: echo $SHELL
/etc/rc.initial
[2.5.0-RELEASE][admin@pfSense]/root:
[2.5.0-RELEASE][admin@pfSense]/root: for i in {1..3}; do echo $i; done
for: Команда не найдена.
i: Неопределенная переменная.
[2.5.0-RELEASE][admin@pfSense]/root:
Если вы хотите работать с конфигурацией, возможно, лучше привыкнуть и узнать pfsense PHP Shell
Как пишет @Kusalananda: Похоже, вы в tcsh. Если вы хотите использовать bash, вам нужно сначала установить его:
pkg install bash
У меня были те же проблемы. Привыкнув к Debian, FreeBSD предоставила некоторые сложности. Следуя этому посту, я получил такой результат в своем терминале
root@OPNsense:~# foreach VALUE (`seq 2 12`)
foreach? echo $VALUE
foreach? end
2
3
4
5
6
7
8
9
10
11
12
root@OPNsense:~#
Надеюсь, это поможет.
Ответ или решение
Проблема, с которой вы столкнулись, возникает из-за различий в оболочках командной строки между Linux и FreeBSD (pfsense). В вашей ситуации вы используете баш (Bash) на Linux, который поддерживает конструкцию цикла for
с фигурными скобками, а на FreeBSD вы, вероятно, используете оболочку tcsh
или csh
, где синтаксис другой и конструкция не может быть применена так же, как в Bash.
Почему ваш код не работает в FreeBSD
Когда вы выполняете команду
for i in {1..3}; do echo $i; done
в bash
, оболочка понимает {1..3}
как диапазон чисел от 1 до 3 и успешно выполняет цикл, который выводит эти значения. Однако в FreeBSD, использующая tcsh или csh по умолчанию, данный синтаксис не поддерживается, и вы получаете ошибку:
for: Command not found.
i: Undefined variable.
Решение проблемы
Способы выполнения цикла в FreeBSD
-
Перемещение в Bash:
Если вы хотите использовать Bash и его возможности, вы можете установить Bash на FreeBSD и выполнить необходимую команду. Для этого выполните:pkg install bash
После установки запустите Bash, выполнив команду
bash
, и попробуйте снова запустить ваш цикл. -
Использование
tcsh/csh
:
Если вы хотите оставаться в tcsh/csh, вам следует использовать синтаксис, подходящий для этой оболочки. Например, вы можете воспользоваться конструкциейforeach
для выполнения цикла:foreach i (`seq 1 3`) echo $i end
Здесь
seq 1 3
генерирует последовательность чисел от 1 до 3. -
Использование PHP Shell pfsense:
Если ваша цель заключается в работе с конфигурацией системы pfsense, вы можете ознакомиться с pfsense PHP Shell. Этот подход может быть более подходящим и эффективным для выполнения административных задач в контексте pfsense.
Вывод
Проблема с циклом for
в FreeBSD может быть решена несколькими способами в зависимости от ваших требований и предпочтений. Понимание различий между оболочками поможет лучше ориентироваться в среде FreeBSD и использовать ее возможности более эффективно. Если вы работаете с конфигурацией pfsense, изучите PHP Shell, это может значительно упростить вашу работу.