我在 LocalDB 文件夹中有两个文件,名为trigger.sh 和 emp.py。
在trigger.sh中我有
export emp_code='IT'
py /C/Users/LocalDB/emp.py
在 emp.py 中
import os
from os import listdir
from os.path import is filed,join
_emp_code=os.environ['emp_code']
Emp_url = {
'IT':{'Emp_url':'www.it.com'},
'Prod':{'Emp_url':'www.prod.com'},
'Qa':{'Emp_url':'www.qa.com'}
}[_emp_code]
Print(Emp_url)
当我触发trigger.sh时我的输出 ""'Emp_url':'www.it.com'"....同样,如果我在 shell 脚本中更改 emp_code,它也会更改..
现在,我尝试在 Shell 脚本中使用这些 url。但是收到“无效标识符”。
我尝试过以下代码: 触发器.sh
export emp_code='IT'
export _emp_url= '
'IT':{'Emp_url':'www.it.com'},
'Prod':{'Emp_url':'www.prod.com'},
'Qa':{'Emp_url':'www.qa.com'}'
py /C/Users/LocalDB/emp.py
emp.py:
import os
from os import listdir
from os.path import is filed,join
_emp_code=os.environ['emp_code']
Emp_url = os.environ ['_emp_url']
Emp_url = {Emp_url}[_emp_code]
Print(Emp_url)
关于如何解决和清除这个问题的任何想法
现在,我尝试在 Shell 脚本中包含这些 url。但我得到了 “无效标识符”。
当您尝试使用不是有效 shell 变量名称的字符串执行
export
操作时,通常会显示此错误消息。 shell 要求 shell 变量名称、=
符号和分配的值之间没有空格。 export
行上空格后面的任何内容都应该是另一个有效的 shell 变量名称,可能后跟 =
进行赋值。
在脚本Trigger.sh中,第一行看起来是正确的;第二行是错误的。在第二行中,
=
后面有一个空格,这使得 shell 需要一个 shell 变量名称(“标识符”),但接下来是一个字符串,其中包含许多标识符中不允许的字符(多个 :
、{
) 、 }
和换行符)。
在 emp.py 中,这一行
from os.path import is filed,join
错了,
is
这个词不应该出现。
[ ranga ] $ python3
Python 3.9.13
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> from os import listdir
>>> from os.path import is filed,join
File "<stdin>", line 1
from os.path import is filed,join
^
SyntaxError: invalid syntax
此行之后:
Emp_url = os.environ ['_emp_url']
Emp_url
仅包含一个字符串,而不是 dict
。
因此,在这一行中:
Emp_url = {Emp_url}[_emp_code]
{Emp_url}
创建一个 set
,其中包含单个条目,其中包含整个字符串,然后尝试使用 _emp_code
(另一个字符串)对其进行索引将失败。
Emp_url 中的字符串需要先转换为
dict
,然后才能用字符串对其进行索引。一种方法是使用 json
包:
import json
Emp_url = json.loads(os.environ['_emp_url'])
为此,环境变量
_emp_url
应包含双引号而不是单引号。也可以仅打印 URL:
print Emp_url['Emp_url']
在 Trigger.sh 中:
所以现在 Trigger.sh 可以有类似的内容:
export \
emp_code='IT' \
_emp_url='{
"IT":{"Emp_url":"www.it.com"},
"Prod":{"Emp_url":"www.prod.com"},
"Qa":{"Emp_url":"www.qa.com"}
}'
py /C/Users/LocalDB/emp.py
emp.py 可以有类似的东西
import os
import json
_emp_code=os.environ['emp_code']
Emp_urls = json.loads(os.environ ['_emp_url'])
Emp_url = Emp_urls[_emp_code]['Emp_url']
print(Emp_url)
尝试一下:
[ ranga ] $ export \
> emp_code='IT' \
> _emp_url='{
> "IT":{"Emp_url":"www.it.com"},
> "Prod":{"Emp_url":"www.prod.com"},
> "Qa":{"Emp_url":"www.qa.com"}
> }'
[ ranga ] $ python3
Python 3.9.13
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> import json
>>>
>>> _emp_code=os.environ['emp_code']
>>> Emp_urls = json.loads(os.environ ['_emp_url'])
>>>
>>> Emp_url = Emp_urls[_emp_code]['Emp_url']
>>> print(Emp_url)
www.it.com
>>>