Вы «отмечаете» панель:
-m и -M используются для установки и очистки отмеченной панели. Существует одна отмеченная панель за раз, установка новой отмеченной панели очищает последнюю. Отмеченная панель является целью по умолчанию для -s для объединения панели, панели подкачки и окна подкачки.
Некоторые действия теперь по умолчанию будут нацелены на отмеченную панель. Вот пример сценария bash для тестирования. Вы можете выполнить этот скрипт из сеанса tmux.
# /usr/bin/env bash
set -euo pipefail
# Make three vertically split windows with text in each.
tmux split-window -v
tmux split-window -v
tmux select-layout even-vertical
tmux send-keys -t 0 'echo pane zero' C-m
tmux send-keys -t 1 'echo pane one' C-m
tmux send-keys -t 2 'echo pane two' C-m
# You can now swap the current pane with an explicitly targeted pane. Here, we
# change pane ordering from 0-1-2 to 1-0-2, and back again.
tmux select-pane -t 0
tmux swap-pane -t 1
tmux swap-pane -t 1
# You can also swap panes by "marking" one and letting the target of the swap be
# implicit. Here, we change ordering from 0-1-2 to 1-0-2, and back again.
tmux select-pane -t 0
tmux select-pane -t 1 -m
tmux swap-pane
tmux swap-pane
Подробнее см. tmux(1).
Если это весь ваш Makefile и вы не отслеживаете какие-либо зависимости между файлами, просто используйте сценарий оболочки:
#!/bin/sh
for domain; do
> "/etc/apache2/sites-available/${domain}.conf" cat <<EOF
<VirtualHost *:80>
DocumentRoot "/var/www/html/${domain}"
ServerName "${domain}"
<Directory "/var/www/html/${domain}">
Options +SymLinksIfOwnerMatch
Require all granted
</Directory>
ServerAlias www.${domain}
</VirtualHost>
EOF
a2ensite "${domain}"
done
systemctl restart apache2.service
Скопируйте приведенное выше в файл с именем, например create- vhost
, сделайте его исполняемым:
chmod 755 create-vhost
затем запустите его как
./create-vhost domain.tld
Это даже поддерживает создание файлов конфигурации нескольких виртуальных хостов (с одним перезапуском в конце):
./create-vhost domain1.tld domain2.tld
У меня есть "новейшая" функция bash, которая используется следующим образом:
newest ${target} ${dependencies} || {
${command} ${dependencies} > $target
}
Она не анализирует скрипт, частью которого является; Я никогда не был поклонником функции "транзитивного закрытия" make, поэтому необходимо только упорядочить инструкции в "makefile".
Используются функции чуть более высокого уровня «bystdout» и «bycommand»
bystdout ${target} ${command} ${dependencies}
bycommand ${target} ${command} ${dependencies}
, где «bycommand» оборачивает те, чьи выходные данные могут быть выведены из зависимостей.
Когда-то я был достаточно сумасшедшим, чтобы написать анализируемый awk язык, который разворачивал вложенные зависимости:
output ={ command }{ dependencies }.
это не такая уж большая задача.
Если вы используете GNU make
, то вы можете с пользой использовать пользовательские функции и добиться желаемого:
# variables utilized
NULL :=
SPC := $(NULL) $(NULL)
TAB := $(NULL)$(shell printf '\t\n')$(NULL)
# macro to repeat a string ($2) ($1) times
_rep_str = $(if $(filter $1,$(words $3)),$(strip $3),$(call _rep_str,$1,$2,$3 $2))
rep_str = $(subst $(SPC),$(NULL),$(subst x,$2,$(call _rep_str,$1,x)))
# TABs for depth of 1, 2, 3, ...
T1 := $(call rep_str,1,$(TAB))
T2 := $(call rep_str,2,$(TAB))
T3 := $(call rep_str,3,$(TAB))
# multiline macro to be used in recipes for generating .conf files
define create_conf
printf '%s\n' \
'<VirtualHost *:80>' \
'$(T1)DocumentRoot "/var/www/html/$@"' \
'$(T1)ServerName $@' \
'$(T1)<Directory "/var/www/html/$@">' \
'$(T2)Options +SymLinksIfOwnerMatch' \
'$(T2)Require all granted' \
'$(T1)</Directory>' \
'$(T1)ServerAlias www.$@' \
'</VirtualHost>' > $@
a2ensite "$@"
systemctl restart apache2.service
endef
# Now there are no leading TABs/spaces in the makefile
% :; @$(call create_conf)
Переменная .RECIPEPREFIX
GNU Make (примечание: не специальная цель) может использоваться для изменения символа, который выделяет строки рецепта.
Например:
.RECIPEPREFIX=>
%:
>printf '%s\n' \
>'<VirtualHost *:80>' \
>'DocumentRoot "/var/www/html/$@"' \
>'ServerName $@' \
>'<Directory "/var/www/html/$@">' \
>'Options +SymLinksIfOwnerMatch' \
>'Require all granted' \
>'</Directory>' \
>'ServerAlias www.$@' \
>'</VirtualHost>' \
>> "$@"
>a2ensite "$@"
>systemctl restart apache2.service