ala*_*lan 1 bash centos environment-variables export amazon-web-services
我对 Linux 非常陌生,并且在 CentOS 中应该是一个非常简单的 Bash 脚本时遇到了问题。
#! /bin/bash
# script to restore the cognos rds from snapshot
export AWS_RDS_HOME=/opt/aws/apitools/rds
export PATH=$PATH:$AWS_RDS_HOME/bin
export AWS_CREDENTIAL_FILE=$AWS_RDS_HOME/credential-file-path.template
echo $AWS_RDS_HOME
echo $PATH
echo $AWS_CREDENTIAL_FILE
rds-delete-db-instance mydb --final-db-snapshot-identifier mydb-daily-$(date +%Y)-$(date +%m)-$(date +%d) --force -region eu-west-1
Run Code Online (Sandbox Code Playgroud)
我添加了 echo 语句,以便我可以看到发生了什么。我运行时的输出
sh myscript.sh
Run Code Online (Sandbox Code Playgroud)
是:
/opt/aws/apitools/rds
/bin/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/ec2-user/bin:/opt/aws/apitools/rds
/credential-file-path.template
rds-delete-db-instance: command not found
Run Code Online (Sandbox Code Playgroud)
因此,当我引用在同一脚本中设置的其他环境变量时,导出命令似乎不起作用。
我哪里错了?
更新:我已经尝试了下面的建议,但仍然不高兴。运行 bash -x 很有趣。每当我尝试连接时,下面的 "\r" 是否会在后面?例如
#! /bin/bash
# test script
export AWS_RDS_HOME=/opt/aws/apitools/rds
export PATH=$PATH:$AWS_RDS_HOME/bin
export AWS_CREDENTIAL_FILE=$AWS_RDS_HOME/credential-file-path.template
echo $AWS_RDS_HOME
echo $PATH
echo $AWS_CREDENTIAL_FILE
Run Code Online (Sandbox Code Playgroud)
结果是:
+ export $'AWS_RDS_HOME=/opt/aws/apitools/rds\r'
+ AWS_RDS_HOME=$'/opt/aws/apitools/rds\r'
+ export $'PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/ec2-user/bin:/opt/aws/apitools/rds\r/bin\r'
+ PATH=$'/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/ec2-user/bin:/opt/aws/apitools/rds\r/bin\r'
+ export $'AWS_CREDENTIAL_FILE=/opt/aws/apitools/rds\r/credential-file-path.template\r'
+ AWS_CREDENTIAL_FILE=$'/opt/aws/apitools/rds\r/credential-file-path.template\r'
+ echo $'/opt/aws/apitools/rds\r\r'
/opt/aws/apitools/rds
+ echo $'/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/ec2-user/bin:/opt/aws/apitools/rds\r/bin\r\r'
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home//binuser/bin:/opt/aws/apitools/rds
+ echo $'/opt/aws/apitools/rds\r/credential-file-path.template\r'
/credential-file-path.template
Run Code Online (Sandbox Code Playgroud)
我在 EC2 上使用默认的 Amazon Linux AMI,所以我的设置不应该有任何时髦
您正在通过运行“sh myscript.sh”来执行脚本。如果您使用“sh”调用 bash,bash 将尝试“尽可能模仿 sh 历史版本的启动行为,同时也符合 POSIX 标准”(根据 bash 的手册页,在调用部分)。
历史悠久的 Bourne shell 无法识别“export VARIABLE=value”。Bourne shell 中导出变量的典型方式是“VARIABLE=value ; export VARIABLE”,即值的设置和导出是分开的命令。将这一切作为一个命令来执行是一种 bash 主义。
因此,您可以尝试将您的脚本调用为“bash myscript.sh”,这应该可以工作(它对我有用,但不可否认它也适用于“sh myscript.sh”调用;我的 shell 设置在某处可能有些有趣,或者你的一些有趣的东西)。您还可以使用“chmod +x myscript.sh”使文件可执行,然后直接使用“./myscript.sh”运行它,因为它应该根据“#!”调用bash 在第一行。
归档时间: |
|
查看次数: |
5689 次 |
最近记录: |