Makefile 替代品,适用于那些不想在开启器下缩进所有内容的制表符

2 make vhost

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)


Ste*_*itt 7

如果这是您的整个 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)