Shell脚本运行pgloader命令时的特殊字符和变量替换问题

pieyvz9o  于 12个月前  发布在  Shell
关注(0)|答案(1)|浏览(161)

我在尝试直接运行pgloader命令时遇到了一个问题,由于特殊字符而导致解析器问题。为了解决这个问题,我决定使用shell脚本执行pgloader命令。但是,在执行过程中,脚本中的echo命令打印以下内容,而不将变量替换为pgsql://pguser:@/db_dev。沿着,我遇到了IndexError: list index out of range异常

#!/bin/bash
# Function to URL encode a string
urlencode() {
  python3 -c "import sys, urllib.parse as ul; print(ul.quote(sys.argv[1]))"
}

#MySQL connection string
mysql_password="Tes^((***))"
mysql_connection="mysql://mysqluser:$(urlencode "$mysql_password")@$(urlencode "test_mysql_url.rds.amazonaws.com:3306")/db_af"

# PostgreSQL connection string
pgsql_password="Test%%*$"
pgsql_connection="pgsql://pguser:$(urlencode "$pgsql_password")@$(urlencode "test_pg_url.rds.amazonaws.com:5432")/db_dev"

echo $pgsql_connection

# Combine both connection strings and execute pgloader
pgloader_command="pgloader $mysql_connection $pgsql_connection"
eval "$pgloader_command"

字符串

7ajki6be

7ajki6be1#

您的函数忘记包含其参数。

urlencode() {
  python3 -c "import sys, urllib.parse as ul; print(ul.quote(sys.argv[1]))" "$@"
}

字符串
如果不是很明显,以python -c开头的行上的最后一个标记是"$@",它包含函数的参数(正确引用)。

相关问题