【发布时间】:2018-08-24 21:49:01
【问题描述】:
我有一个执行此操作的 bash 脚本:
#!/bin/bash
# $1 = database dump
# $2 = mysql connect command
$2 < $1
最后一部分将输出打印到我不想要的 stdout 和 stderr。但是,我不知道如何最好地进行 > /dev/null 2>&1 样式重定向,因为我已经在进行输入重定向。
【问题讨论】:
-
顺便说一句,报价很重要。如果您的文件名包含空格,
< $1将失败,而< "$1"不会。 (在单个参数中传递命令几乎总是有问题;请参阅 mywiki.wooledge.org/BashFAQ/050 了解原因的完整描述) -
好的做法是:
dump=$1; shift; "$@" <"$dump",将您的命令作为一系列单独的参数传递;也就是说,像./yourscript dumpfile mysql -u username这样的东西——这样任何参数(文件名、MySQL 的其他参数等)都可以有引号/空格/等。并且仍然得到正确处理。
标签: bash shell stdout stderr io-redirection