将echo写入脚本

时间:2017-08-08 07:16:01

标签: bash shell

在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,而不是现在编写。

由于

1 个答案:

答案 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