CentOS 7 /Usr/Share/doc/initscripts-9.49.24/sysconfig.txt говорит:
больше не поддерживается: PROMICK = Да | Нет (включить или отключить беспорядочный режим) Allmulti = Да | Нет (включить или отключить все-многоадресный режим)
Так что для включения вам необходимо запустить:
ip link set ethX promisc on
или если вы хотите произойти при загрузке, вы можете использовать Systemd
Systemd RC-Local
.
Поместите вышеуказанную линию в /etc/rc.d/rc.local
(не забудьте изменить Ethx с вашим правильным устройством), затем:
chmod u+x /etc/rc.d/rc.local
systemctl enable rc-local
systemctl start rc-local
Вам не нужно запускать команду ls *.c
. Бэш автоматически расширит шаблон подстановочного знака. Так что если вы в полном отчаянии и не хотите делать Makefile, вы можете сделать это:
#!/usr/bin/env bash
for i in *.c
do
echo "gcc -g3 -o3 $i -o ${i%.c}.out"
# gcc -g3 -o3 "$i" -o "${i%.c}.out"
done
Скажем, у меня был этот образец данных:
$ ls -1
a.c
b.c
c.bash
c.c
d.c
e.c
Запуск моего скрипта c.bash
:
$ ./c.bash
gcc -g3 -o3 a.c -o a.out
gcc -g3 -o3 b.c -o b.out
gcc -g3 -o3 c.c -o c.out
gcc -g3 -o3 d.c -o d.out
gcc -g3 -o3 e.c -o e.out
Чтобы заставить скрипт работать, вы прокомментируете строку echo
выше, и прокомментируете строку gcc
.
Ваша петля for-loop for i в 'ls *.c'
переплетается через буквальную строку "ls *.c
", а не через выходную команду, как вы задумывали. Это можно исправить с помощью оператора подстановки команд (например, for i в $(ls *.c); do....
), но, как указывает slm в своем ответе , в команде вообще нет необходимости, так как можно использовать вывод shell globbing в for-loop :)
Весь этот вопрос можно было бы также решить более корректно с помощью простого makefile:
CC = gcc
CFLAGS = -std=c99 -pedantic -D_XOPEN_SOURCE=600 -Wall -Werror -g
RM = rm -f
SRCS = $(wildcard *.c)
PROGS = $(patsubst %.c,%,$(SRCS))
.PHONY: all clean
all: $(PROGS)
%: %.c
$(CC) $(CFLAGS) -g3 -o3 -o $@ $<
clean:
$(RM) $(PROGS)
Запишите как "Makefile", запустите make
. Удалите скомпилированные программы (чисто), запустив make clean
. (Частично источник на Martin)
Глядя конкретно на ваш вопрос, кажется, что «где вы ошиблись» находится в расширении вашего параметра. Я думаю, вы пытались изменить значение i при именовании выходного файла здесь:
{$i%.}
Мне кажется, вы неправильно поставили знак доллара. Возможно, вы имели в виду:
${i%.}
Хотя честно говоря, это только удалило бы «.» от исходного имени файла. Принимая во внимание, что «filename.c» дал бы «filenamec.out». Вы, наверное, хотите:
${i%.*}
Это дало бы «filename.out». Этот синтаксис расширения параметра преобразуется в нежадное удаление -всего, что начинается с «.» и после. Для жадного удаления синтаксис будет:
${i%%.*}
Я надеюсь, что это лучше ответит на ваш вопрос, поскольку он относится к вашему коду.