make
如果不想在我的make
程序(或make
类似)程序中使用制表符缩进,是否有 GNU替代方案?
例如,当我使用 时make
,我需要在make
开场白 ( % :
)之后缩进所有内容。这是在某些情况下解决某些问题的秘诀(例如,我跨平台工作并且我使用 Windows10 AutoHotkey 机制,该机制从我出于不同原因粘贴到 Linux 终端的代码中剥离选项卡,并且它不会传递,make
因此我需要一个非标签包括解决方案)。
对所有内容进行制表符缩进的必要性% :
使我的工作变得make
不流畅。
这是make
我用来创建新的虚拟主机 conf 文件的。我执行它make domain.tld.conf
:
% :
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
Run Code Online (Sandbox Code Playgroud)
有没有其他选择,也许是 Unix 本身附带的东西,它提供了类似的功能,但不必在模式文件本身中使用制表符缩进?
zwo*_*wol 10
GNU Make 的.RECIPEPREFIX
变量(注意:不是特殊目标)可用于更改引发配方行的字符。
例如:
.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
Run Code Online (Sandbox Code Playgroud)
如果这是您的整个 Makefile,并且您没有跟踪文件之间的任何依赖关系,只需使用 shell 脚本:
#!/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
Run Code Online (Sandbox Code Playgroud)
将上述内容复制到名为 example 的文件中create-vhost
,使其可执行:
chmod 755 create-vhost
Run Code Online (Sandbox Code Playgroud)
然后运行它
./create-vhost domain.tld
Run Code Online (Sandbox Code Playgroud)
这甚至支持创建多个虚拟主机的配置文件(最后一次重启):
./create-vhost domain1.tld domain2.tld
Run Code Online (Sandbox Code Playgroud)