В bash пытаюсь запустить сразу несколько xeyes.
Если я сделаю это:
for a in `seq 1 3`; do "xeyes"; done
Я получаю 1 xeye, а последующие xeyes появляются только тогда, когда я закрываю предыдущий xeye.
Поэтому я попробовал:
for a in `seq 1 3`; do "xeyes &"; done
Но при запуске этой команды ничего не происходит.
Что я делаю не так?
Bash имеет оператор диапазона и стиль C for
петли, так seq
обычно не требуется. Он может понадобиться вам в оболочке Bourne или при некоторых особых обстоятельствах. Вот как вы бы сделали свой пример на чистом Bash без вызова каких-либо внешних программ (кроме xeyes
):
for a in {1..3}; do xeyes & done # range of 1 to 3, no vars in this type of {}
или
for ((a = 1; a <= 3; a++)); do xeyes & done # C-style for loop, can have vars
Обычно запуск приложений с поддержкой X означает, что они не возвращают управление bash до тех пор, пока не закончат работу, как вы видите в первом примере. Во втором примере цитаты (я думаю) запускают подпроцесс, который не знает, под каким дисплеем работать.
Простое разделение его на три строки (чтобы избежать необходимости в кавычках) помогло мне. Другими словами:
for i in `seq 1 3`; do
xeyes &
done
Наслаждайтесь! Это не самая полезная демонстрация bash, но я полагаю, что она может быть интересной.
Пытаться
for a in `seq 1 3`; do xeyes & ; done
Ваша ошибка - поставить "xeyes &"
в двойных кавычках. Это заставляет bash рассматривать ее буквально как команду из одного слова, содержащую пробел и амперсанд.