gpt4 book ai didi

linux - 如何将左三角形 (<) 作为别名命令的一部分包含在内?

转载 作者:太空宇宙 更新时间:2023-11-04 05:10:50 25 4
gpt4 key购买 nike

我正在对公司现有产品进行容器化,并将 MySQL 数据库分离到不同的容器中。为了访问主容器内的 MySQL 服务器,我在 ./bashrc 中创建了一个别名,这样如果命令是:

mysql ...

它实际上运行以下内容:

docker exec -it ${MYSQL_CONTAINER} mysql ...

但是,如果命令包含左三角形来添加文件,例如:

mysql < test.sql

我使用别名复制文件并运行它,但主容器所在的 bash 将左三角形读取为单独的组件,而不是参数列表的一部分。

如何使我的别名将左三角形作为参数的一部分?我无法将“< test.sql”部分用引号引起来,因为现有外部软件在脚本中运行该命令,我必须调整容器来解决它。谢谢。

function mysql() {

$1
$2
$3
$4

if [[ $1 == "--defaults-file=my.cnf" ]] && [[ ! $2 ]]; then
docker exec -it ${MYSQL_CONTAINER} mysql $1
elif [[ $1 == "--defaults-file=my.cnf" ]] && [[ $2 = "<" ]]; then
#docker cp $3 $(docker inspect -f '{{.Id}}' ${MYSQL_CONTAINER}):/docker-entrypoint-initdb.d/
#docker exec ${MYSQL_CONTAINER} sh -c "mysql $1 $2 docker-entrypoint-initdb.d/$3"
elif [[ $1 == "-uroot" ]] && [[ ! $3 ]]; then
docker exec -it ${MYSQL_CONTAINER} mysql $1 $2
elif [[ $1 == "-uroot" ]] && [[ $3 = "<" ]]; then
docker cp $4 $(docker inspect -f '{{.Id}}' ${MYSQL_CONTAINER}):/docker-entrypoint-initdb.d/
docker exec ${MYSQL_CONTAINER} sh -c "mysql $1 $2 $3 docker-entrypoint-initdb.d/$4"
else
docker exec -it ${MYSQL_CONTAINER} mysql $1
fi

}

最佳答案

您需要引用或转义 <字符,否则由原始 shell 作为输入重定向运算符处理:

mysql '<' test.sql

然后是<将会按字面意思传递给你的函数,它会将它传递给 docker .

关于linux - 如何将左三角形 (<) 作为别名命令的一部分包含在内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55601650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com