V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ivanlw
V2EX  ›  Bash

初学者关于 sh 的问题

  •  
  •   ivanlw · 2014-07-02 02:30:22 +08:00 · 2683 次点击
    这是一个创建于 3822 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近刚接触sh,知道写一个文件包含多句命令,能依次执行下来。
    现在想实现一个功能,就是其中一个命令会进入另外一个程序,然后在那个程序里面执行这个文件的下一句话,这样子有可能实现吗?
    比如说
    # ----sh file----
    mysql
    show databases;
    # ----end----
    这样子把mysql里面的databases打出来?试了一下是不行的,有没有实现这样子的解决方法呢?
    5 条回复    2014-07-02 09:01:28 +08:00
    yangqi
        1
    yangqi  
       2014-07-02 02:39:57 +08:00   ❤️ 1
    mysql -u user -p password -e 'show databases'
    multiple1902
        2
    multiple1902  
       2014-07-02 02:40:04 +08:00 via Android   ❤️ 1
    有个叫 expect 的工具就可以用来解决这个,经常用在 ssh 连接自动输入密码这件事上。

    具体到你的例子,建议你考虑能不能争取把那个子命令作为 mysql 命令的参数,这样整个就是一个命令把事搞定,这样更符合 bash 的编程思想吧。
    Comphuse
        3
    Comphuse  
       2014-07-02 02:51:38 +08:00
    echo "show databases" | mysql -u 用户名 -p密码。 # -p 和 密码之间没有空格。
    mysql -u 用户名 -p密码 < SQL脚本文件。
    blacktulip
        4
    blacktulip  
       2014-07-02 02:54:10 +08:00
    mysql -h localhost -u <USERNAME> -p="<PASSWORD>" -D <DATABASE> -e "show databases;show databases;show databases"
    orzfly
        5
    orzfly  
       2014-07-02 09:01:28 +08:00
    http://stackoverflow.com/a/6150728/2724079

    mysql --host=localhost --user=user --password=password << 'END'

    CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'jakdJxct8W';
    CREATE DATABASE IF NOT EXISTS 'testuser_dev' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
    GRANT ALL PRIVILEGES ON 'testuser_dev' . * TO 'testuser'@'localhost';
    CREATE DATABASE IF NOT EXISTS 'testuser_qa' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
    GRANT ALL PRIVILEGES ON 'testuser_qa' . * TO 'testuser'@'localhost';

    END
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1392 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 17:25 · PVG 01:25 · LAX 09:25 · JFK 12:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.