2010-12-07 2 views
0

OK пытается написать SQL-запрос в текстовый файл. Я пробовал кошку, и эхо не повезло.Bash записать в файл (переменные?)

Вот что я хотел бы записать в файл:

USE vsftpd; 
    CREATE TABLE `accounts` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 
    `username` VARCHAR(30) NOT NULL , 
    `pass` VARCHAR(50) NOT NULL , 
    UNIQUE (
    `username` 
    ) 

) ENGINE = MYISAM ; 

quit; 

это то, что я получаю, когда с помощью кошки или эхо (может быть, мне нужен какой-то переключатель?):

USE vsftpd; 
CREATE TABLE (
uid=0(root) gid=0(root) groups=0(root) INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 
VARCHAR(30) NOT NULL , 
VARCHAR(50) NOT NULL , 
UNIQUE (

) 
) ENGINE = MYISAM ; 

quit; 
+0

Это поможет, если вы показали нам точную команду, которую вы пытались использовать! – 2010-12-07 01:53:31

ответ

1

Если запустить вещи с обратными кавычками в оболочке, он будет оценивать команды, заключенные в` `. Таким образом, один из способов сделать это является использование апостроф, как так:

$ echo ' USE vsftpd; 
    CREATE TABLE `accounts` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 
    `username` VARCHAR(30) NOT NULL , 
    `pass` VARCHAR(50) NOT NULL , 
    UNIQUE (
    `username` 
    ) 

) ENGINE = MYISAM ; 

quit; 
' > file.sql 

$ more file.sql # verify content is correct 
+0

Спасибо, что продемонстрировали мне разницу между одиночными и двойными кавычками;) Я использовал " – jmituzas 2010-12-07 02:08:15

2

Трудно сказать, как исправить это, не видя точной команды, которую вы используете, но я подозреваю, что оболочка делает ваш текст backquote substitution. Так, где у вас есть

CREATE TABLE `accounts` 

Баш пытается выполнить accounts как команда, и заменить закавыченный текст на стандартный вывод команды. И поскольку на вашем пути, вероятно, нет такой команды, в выводе будет скрытый раздел.

Попытка побег каждого символ `с обратным косыми чертами, например:

CREATE TABLE \`accounts\` 
+0

Вау, это было чем-то вроде тяжелой работы в Markdown! Наконец, пришлось отказаться от форматирования его встроенного и сделать это как блоки, вместо этого. Вероятно, не хватает обратных косых черт (они похожи на насилие ... если это не решит вашу проблему, вы, вероятно, недостаточно используете.) – 2010-12-07 02:09:32

0

в любом случае думаю, я могу опубликовать все это в настоящее время в случае, если кто-то там использует VSFTPD и вы помогли мне. Heres скрипт для VSFTPD с MySQL для виртуального users.Everything здесь, за исключением создания новых пользователей, которые вы можете выяснить, как написать, что от того, что дано:

#!/bin/bash 

while [[ "$yn" != "Yes" && "$yn" != "Y" && "$yn" != "y" && "$yn" != "yes" ]]; do 
echo "name for your root password for MySQL" 
read rpsql 
echo "name for your primary FTP user" 
read puftp 
echo "what's you ftp password?" 
read pftp 
echo "what's the IPaddress of this server?" 
read fip 
echo "What is the Hostname of this server?" 
read fhost 
    echo "You have entered $rpsql as your MySQL password" 
    echo "You have entered $puftp as your FTP user" 
    echo "You have entered $pftp as your Primary FTP password" 
    echo "You have entered $fip as your IP address" 
    echo "You have entered $fhost as your hostname" 
    echo "Are all of these correct? (Yes or No)" 
     read yn 
done 

echo '######################################################################' 
echo '##### Installing, configuring, and creating FTP Users and Shares #####' 
echo '######################################################################' 

apt-get install vsftpd libpam-mysql mysql-client phpmyadmin 

mysqladmin -h nexwrxdemo.com -u root password $rpsql 

echo 'CREATE DATABASE vsftpd; 
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO '$puftp'@'localhost' IDENTIFIED BY '$pftp'; 
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO '$puftp'@'localhost.localdomain' IDENTIFIED BY '$pftp'; 
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO '$puftp'@'$fip' IDENTIFIED BY '$pftp'; 
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO '$puftp'@'$fhost' IDENTIFIED BY '$pftp'; 
FLUSH PRIVILEGES; 

USE vsftpd; 
    CREATE TABLE `accounts` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 
    `username` VARCHAR(30) NOT NULL , 
    `pass` VARCHAR(50) NOT NULL , 
    UNIQUE (
    `username` 
    ) 

) ENGINE = MYISAM ; 

quit; ' > vsftpd.db 

echo "granting permissions to 'vsftpd' on database 'vsftpd'" 

mysql -u root -p$rpsql < vsftpd.db 

echo "creating a non-privileged user called 'vsftp' (with the homedir /home/vsftpd) belonging to the group 'nogroup'" 

useradd --home /home/$puftp --gid nogroup -m --shell /bin/false $puftp 

echo "configuring vsftpd" 
echo "backing up vsftpd config file" 

cp -r -f -p /etc/vsftpd.conf /backups/ 
cat /dev/null > /etc/vsftpd.conf 

echo 'listen=YES 
anonymous_enable=NO 
local_enable=YES 
write_enable=YES 
local_umask=022 
dirmessage_enable=YES 
xferlog_enable=YES 
connect_from_port_20=YES 
nopriv_user=vsftpd 
chroot_local_user=YES 
secure_chroot_dir=/var/run/vsftpd 
pam_service_name=vsftpd 
rsa_cert_file=/etc/ssl/certs/vsftpd.pem 
guest_enable=YES 
guest_username=vsftpd 
local_root=/home/vsftpd/$USER 
user_sub_token=$USER 
virtual_use_local_privs=YES 
user_config_dir=/etc/vsftpd_user_conf 
' > /etc/vsftpd.conf 

mkdir /etc/vsftpd_user_conf 

echo "backing up pam/vsftpd config file" 

cp -r -f -p /etc/pam.d/vsftpd /orig-config/ 
cat /dev/null > /etc/pam.d/vsftpd 

echo "auth required pam_mysql.so user=$puftp passwd=$psql host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2 
account required pam_mysql.so user=$puftp passwd=$psql host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2" > /etc/pam.d/vsftpd 

/etc/init.d/vsftpd restart 
#may be service vsftpd restart 

echo "setting up ftp admin & standard users for websites" 
echo "adding new users to ftp database" 
+0

Если вы хотите создать пустой файл или удалить существующий файл, вам не нужно использовать` cat/dev/null`, просто используйте `> filename`. И нет причин для этого, так как ваша следующая команда в каждом случае будет создавать/перезаписывать файл (так как вы не добавляете с `>>`). – 2010-12-07 03:41:17

Смежные вопросы