В tcsh расширение !:1*
эквивалентно !:1-$
Достигнуть, что Вы хотите Вас, должно сделать это:
alias najdi 'echo /usr/ports/*/*\!:1-1* | sed -e "y/ /\n/"'
Лично я предпочитаю использовать find
вместо расширения оболочки:
alias najdi 'find /usr/ports -type d -maxdepth 2 -name \*\!:1-1\* -print'
Если вы хотите сэкономить себе некоторые усилия набора текста
eval "nohup bash "script{1..3}.sh" &"
или на второй мыслях, может быть, нет
Мы также можем использовать XARGS
для запуска нескольких сценариев параллельно.
$ ls script{1..5}.sh|xargs -n 1 -P 0 bash
Здесь каждый скрипт передан в Bash в качестве аргумента отдельно. -P 0
указывает, что количество параллельного процесса может быть максимально максимально. Также безопаснее, что используя функцию управления заданиями
(&)
.
Одно решение строка:
$ nohup bash script1.sh & nohup bash script2.sh & nohup bash script3.sh &
Менее грациозно, просто используйте оберточный сценарий:
$ cat script.sh
#!/usr/bin/env bash
script1.sh &
script2.sh &
script3.sh &
$ nohup script.sh &
Или зацикливайте их:
for script in dir/*.sh
do
nohup bash "$script" &
done
Я предлагаю гораздо более простую утилиту, которую я только что написал. В настоящее время он называется наравне, но будет переименован в ближайшее время на либо Pary или PLL, еще не решил.
API так же просто, как:
par "script1.sh" "script2.sh" "script3.sh"
Лучшим способом было бы использовать GNU Parallel . Параллельный GNU прост, и с его помощью мы можем контролировать количество заданий, выполняемых параллельно, с большим контролем над заданиями.
В приведенной ниже команде сценарий {1..3} .sh
раскрывается и передается в качестве аргументов в bash
параллельно. Здесь -j0
указывает, что нужно запустить как можно больше заданий. По умолчанию parallel
выполняет одно задание для одного ядра процессора.
$ parallel -j0 bash :::: <(ls script{1..3}.sh)
И вы также можете попробовать использовать
$ parallel -j0 bash ::: script{1..3}.sh
При выполнении второго метода, если вы получите какое-либо сообщение об ошибке, это означает, что параметр - tollef
установлен в / etc / parallel / config
, и его нужно удалить, и все будет работать нормально.
Вы можете прочитать GNU Parallels
страницу руководства здесь для более обширных опций.
А в случае, если вы запускаете задания с удаленного компьютера, лучше использовать screen
, чтобы сеанс не закрывался из-за сетевых проблем. nohup
не требуется, так как последние версии bash поставляются с huponexit
как off
, и это не позволяет родительской оболочке отправлять сигнал HUP
своим детям во время его выхода. Если он не отключен, сделайте это с помощью
$ shopt -u huponexit
Запишите все свои команды в родительский скрипт (parent _script.sh ), который выглядит следующим образом:
bash script1.sh &
bash script2.sh &
bash script3.sh &
wait
Добавление «подождите» в конце скрипта запустит его параллельно. Затем отправьте родительский скрипт с nohup.
nohup bash parent_script.sh