V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
ivanlw
V2EX  ›  Bash

初学者关于 sh 的问题

  •  
  •   ivanlw · Jul 2, 2014 · 3219 views
    This topic created in 4324 days ago, the information mentioned may be changed or developed.
    最近刚接触sh,知道写一个文件包含多句命令,能依次执行下来。
    现在想实现一个功能,就是其中一个命令会进入另外一个程序,然后在那个程序里面执行这个文件的下一句话,这样子有可能实现吗?
    比如说
    # ----sh file----
    mysql
    show databases;
    # ----end----
    这样子把mysql里面的databases打出来?试了一下是不行的,有没有实现这样子的解决方法呢?
    5 replies    2014-07-02 09:01:28 +08:00
    yangqi
        1
    yangqi  
       Jul 2, 2014   ❤️ 1
    mysql -u user -p password -e 'show databases'
    multiple1902
        2
    multiple1902  
       Jul 2, 2014 via Android   ❤️ 1
    有个叫 expect 的工具就可以用来解决这个,经常用在 ssh 连接自动输入密码这件事上。

    具体到你的例子,建议你考虑能不能争取把那个子命令作为 mysql 命令的参数,这样整个就是一个命令把事搞定,这样更符合 bash 的编程思想吧。
    Comphuse
        3
    Comphuse  
       Jul 2, 2014
    echo "show databases" | mysql -u 用户名 -p密码。 # -p 和 密码之间没有空格。
    mysql -u 用户名 -p密码 < SQL脚本文件。
    blacktulip
        4
    blacktulip  
       Jul 2, 2014
    mysql -h localhost -u <USERNAME> -p="<PASSWORD>" -D <DATABASE> -e "show databases;show databases;show databases"
    orzfly
        5
    orzfly  
       Jul 2, 2014
    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
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2303 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 00:21 · PVG 08:21 · LAX 17:21 · JFK 20:21
    ♥ Do have faith in what you're doing.