Macos 尝试从.sh文件中获取AWS环境变量时的奇怪行为

Macos 尝试从.sh文件中获取AWS环境变量时的奇怪行为,macos,amazon-web-services,unix,Macos,Amazon Web Services,Unix,要在使用AWS CLI时快速切换身份,我有一个包含已下载凭据(csv文件)的文件夹。我听说有更复杂的方法来切换配置文件,但这种方法对我来说很有效,我一直懒得去改变它。我尝试将其中一个更改为shell脚本,我可以从中获得: # identity.sh export AWS_ACCESS_KEY_ID='AKIABLAHBLAHKQKLQLGA' export AWS_SECRET_ACCESS_KEY='secretblahblahblah' 如果我将这两行一次复制/粘贴到会话中,一切正常。但是

要在使用AWS CLI时快速切换身份,我有一个包含已下载凭据(csv文件)的文件夹。我听说有更复杂的方法来切换配置文件,但这种方法对我来说很有效,我一直懒得去改变它。我尝试将其中一个更改为shell脚本,我可以从中获得:

# identity.sh
export AWS_ACCESS_KEY_ID='AKIABLAHBLAHKQKLQLGA'
export AWS_SECRET_ACCESS_KEY='secretblahblahblah'
如果我将这两行一次复制/粘贴到会话中,一切正常。但是如果我找到文件的来源-
~/凭据/identity.sh
变量已损坏。我的shell脚本似乎认为第一个变量中有一个换行符。举例说明:

$ export | grep AWS
"eclare -x AWS_ACCESS_KEY_ID="AKIABLAHBLAHKQKLQLGA
"eclare -x AWS_SECRET_ACCESS_KEY="secretblahblahblah
如果我通过复制/粘贴一次导出一个变量,则输出如下:

$ export | grep AWS
declare -x AWS_ACCESS_KEY_ID="AKIABLAHBLAHKQKLQLGA"
declare -x AWS_SECRET_ACCESS_KEY="secretblahblahblah"
当我尝试获取文件源代码时,如果知道CLI不起作用,任何人都不会感到惊讶:

$ aws s3 ls
Invalid header value 'AWS AKIABLAHBLAHKQKLQLGA\r:blahblah='
现在,这更多的是一个奇怪的谜题,而不是一个实际的问题,但我尝试了各种方法来解决这个问题:

  • 两个变量都在一行上,没有用&&或分隔的换行符
  • 双引号,单引号,无引号
  • 文件的不同编辑器(该编辑器使我认为该编辑器对换行符使用了旧的Mac约定,\r但即使使用nano和vi,也会出现相同的问题)
  • 重新生成凭据(第一个秘密中有一个斜杠)
  • 对.sh文件的权限(源变量不需要-x,添加-x没有任何效果)

有人有线索吗?提前感谢。

可能是
identity.sh
文件是在Windows计算机上创建的,具有不可打印的DOS字符。您可以使用
cat-t
进行检查:

-不显示非打印字符

将向您显示控制字符。您可以使用
dos2unix
命令将其转换为Mac。如果未安装
dos2unix

$ brew install dos2unix
另一个选择是使用
vi
或您喜爱的编辑器在Mac上创建该文件草稿

NAME
       dos2unix - DOS/Mac to Unix and vice versa text file format converter

SYNOPSIS
           dos2unix [options] [FILE ...] [-n INFILE OUTFILE ...]
           unix2dos [options] [FILE ...] [-n INFILE OUTFILE ...]

DESCRIPTION
       The Dos2unix package includes utilities "dos2unix" and "unix2dos" to convert plain text files in DOS or Mac format to Unix format and vice versa.

它实际上有\r\n在那里。。。我的文本编辑器声称使用了unix行结尾字符,但事实并非如此。事实证明,如果在nano中编辑它,即使删除换行符并重新插入它,它也会保留换行符的结束约定。谢谢。啊,实际上是从AWS IAM下载的原始CSV,有ctrl-m(\r)字符。有一次,我编辑了这篇文章,每个编辑都决定为自己提供帮助,并保持这种习惯。
NAME
       dos2unix - DOS/Mac to Unix and vice versa text file format converter

SYNOPSIS
           dos2unix [options] [FILE ...] [-n INFILE OUTFILE ...]
           unix2dos [options] [FILE ...] [-n INFILE OUTFILE ...]

DESCRIPTION
       The Dos2unix package includes utilities "dos2unix" and "unix2dos" to convert plain text files in DOS or Mac format to Unix format and vice versa.