在bash脚本中,我需要创建另一个脚本文件,所以我有以下
cat >/etc/script2.sh <<EOL
#!/bin/bash
mysql -e "SHOW TABLES FROM $DATABASE_NAME" > /var/lib/mysql-files/tables.txt
echo "$(tail -n +2 /var/lib/mysql-files/tables.txt)" > /var/lib/mysql-files/tables.txt
EOL
然而,执行第5行的echo
并将输出添加到script2.sh
我如何让script2
看起来像
#!/bin/bash
mysql -e "SHOW TABLES FROM $DATABASE_NAME" > /var/lib/mysql-files/tables.txt
echo "$(tail -n +2 /var/lib/mysql-files/tables.txt)" > /var/lib/mysql-files/tables.txt
没有执行echo
?
更新
当/var/lib/mysql-files/tables.txt
不存在时,使用我当前的代码,我得到tail: cannot open '/var/lib/mysql-files/tables.txt' for reading: No such file or directory
当文件存在时,我得到类似
的内容mysql -e "SHOW TABLES FROM reaction_production" > /var/lib/mysql-files/tables.txt
echo "table1
table2
table3" > /var/lib/mysql-files/tables.txt
将来执行时必须评估Script2,而不是现在编写。
由于
答案 0 :(得分:1)
您需要对流程替换的$
进行检查,以便在当前脚本中将其视为string
,从而在执行script2.sh
时进行评估。
#!/bin/bash
cat > /etc/script2.sh << EOF
#!/bin/bash
mysql -e "SHOW TABLES FROM $DATABASE_NAME" > /var/lib/mysql-files/tables.txt
echo "\$(tail -n +2 /var/lib/mysql-files/tables.txt)" > /var/lib/mysql-files/tables.txt
EOF