従来の方法を使用して、次のスクリプトを実行できます。
cd ~ && vi script.sh [PASTE SCRIPT INSIDE] && chmod +x script.sh && ./script.sh && rm -rf script.sh
ただし、Heredocを使用して同じスクリプトを実行すると(Bashプロンプトから直接貼り付けて実行)、スクリプトは部分的にのみ実行され、終了する前に中断されます。
たとえば、Heredocを使用して次のスクリプトを実行するとどうなりますか?
PHPmyadminのインストールインタフェースはCLIと統合されており、CLI自体は標準的な入力履歴を除くほとんどすべての機能を失いました。
スクリプト(私のHeredocと共に):
bash << 'EOT0'
#!/bin/bash -x
# Setup LAMP environment with enabled mod rewrite:
cd ~
apt-get install lamp-server^ -y
a2enmod rewrite
cat << EOF >> /etc/apach2/apache2.conf
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
EOF
service apache2 restart
# Setup Webmin and some dependencies:
apt-get install unzip perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl apt-show-versions python -y
wget http://prdownloads.sourceforge.net/webadmin/webmin_1.810_all.deb
dpkg --install webmin_1.810_all.deb
apt-get -f install
sed -i 's/ssl=1/ssl=0/g' /etc/webmin/miniserv.conf
/etc/init.d/webmin restart
# Cron tasks:
echo -e "\07" && echo -e "\007" # Choose Nano (2) and do ^x.
USER=benqzq
crontab -u $USER -l 2>/dev/null
cat <<- 'EOF'
0 8 * * * tar -zcvf /home/USERNAME/backups/files/www-html-$(date +\%F-\%T-).tar.gz /var/www/html
0 8 * * * find /home/USERNAME/backups/files/* -mtime +30 -exec rm {} \;
0 8 * * * mysqldump -u root -PASSWORD --all-databases > /home/USERNAME/backups/mysql/alldb_backup.sql
1 8 * * * tar -zcvf /home/USERNAME/backups/mysql/alldb_backup-$(date +\%F-\%T-).sql.tar.gz /home/USERNAME/backups/mysql/alldb_backup.sql
2 8 * * * rm /home/USER/backups/mysql/alldb_backup.sql
2 8 * * * find /home/USERNAME/backups/mysql/* -mtime +30 -exec rm {} \;
EOF
crontab -e
USER=root
# Setup PMA:
echo -e "\07" && echo -e "\007"
apt-get install phpmyadmin php-mb\string php-gettext -y
phpenmod mcrypt && phpenmod mbstring
bash -c "echo 'Include /etc/phpmyadmin/apache.conf' >> /etc/apache2/apache2.conf"
systemctl reload apache2.service
# Setup Fail2Ban:
apt-get install fail2ban -y
# Secure PMA HTTP authentication from BFAs with Fail2Ban:
cat << EOF > /etc/fail2ban/filter.d/phpmyadmin.conf
[Definition]
denied = mysql-denied|allow-denied|root-denied|empty-denied
failregex = ^<HOST> -.*(?:%(denied)s)$
ignoreregex =
EOF
cat << EOF >> /etc/fail2ban/jail.local
[phpmyadmin]
enabled = true
port = http,https
filter = phpmyadmin
logpath = /var/log/apache2/phpmyadmin_access.log
EOF
service apache2 reload
service fail2ban reload
reboot
# Comment1
# Comment2
# Comment3
# ...
EOT0
Stephen Chazerasのアップデート
答え1
あなたはしています:
bash << 'EOT'
some-command-that-reads-stdin
EOT
ただし、some-command-that-reads-stdin
標準入力はbash
同じですstdin
。
次のことができます。
bash /dev/fd/3 3<< 'EOT'
some-command-that-reads-stdin
EOT
したがって、stdinは同じままで、bash
コードは他のfdのこのドキュメントから取得されます。
答え2
おそらく間違ったシェルを使用しているでしょう。bash << 'EOT0'
との間の空白行を削除します#!/bin/bash -x
。
次の行を追加して、どのシェルが使用されているかを確認できます。
echo $SHELL >/tmp/shell.txt
次に、単純な猫を使用して結果を確認します。
cat /tmp/shell.txt