如何将变量从 bash 脚本传递到 TCL?
How to pass variables from a bash script to TCL?
我以前从未使用过 TCL,但我需要使用它来在我们使用的工具中编写命令脚本。我有一个 bash 脚本 运行 从 AD 获取一些信息,然后它会传递给 TCL 脚本使用。这是我的 bash 脚本,运行没有任何问题。
echo "Enter username for LDAP Search"
read USERNAME
export USERNAME
echo "Enter password"
read -s PASSWORD
export PASSWORD
echo "What user do you want to add to Centrify?"
read CENTRIFY_USER
export CENTRIFY_USER
OBJECTSID=`ldapsearch -H ldap://my.domain.com:389 -D "$USERNAME@MY.REALM.COM" -w $PASSWORD -x -b "DC=my,DC=domain,DC=com" "(&(objectCategory=user)(sAMAccountName=$CENTRIFY_USER))" | grep objectSid | cut -d " " -f2`
SID=`/home/mydirectory/convert_objectSid_to_sid.sh $OBJECTSID`
export SID
echo "Adding user to Centrify..."
/home/mydirectory/add_users_to_centrify.sh
"add_users_to_centrify.sh"是随后调用的tcl脚本,但是我在tcl脚本中得到了错误error during execution: can't read "USERNAME": no such variable
。
内容如下:
#!/bin/sh
# \
exec adedit "[=12=]" ${1+"$@"}
package require ade_lib
puts $env(USERNAME)
puts $env(PASSWORD)
puts $env(SID)
puts $env(CENTRIFY_USER)
bind my.domain.com $USERNAME {$PASSWORD}
另一个问题,当调用 tcl 脚本时,我传递的所有参数都会被打印出来,包括密码。我原以为导出是最安全的方法,因为它应该只为这个子 shell 设置环境变量而不是打印它们。这里发生了什么?
正在打印密码,因为您明确打印了密码 (puts $env(PASSWORD)
)。
错误似乎很明显:tcl 脚本中没有名为USERNAME
的变量。您可以像这样设置一个(PASSWORD
也类似):
set USERNAME $env(USERNAME)
或者您可以直接使用环境变量:
bind my.domain.com $env(USERNAME) {$env(PASSWORD)}
我以前从未使用过 TCL,但我需要使用它来在我们使用的工具中编写命令脚本。我有一个 bash 脚本 运行 从 AD 获取一些信息,然后它会传递给 TCL 脚本使用。这是我的 bash 脚本,运行没有任何问题。
echo "Enter username for LDAP Search"
read USERNAME
export USERNAME
echo "Enter password"
read -s PASSWORD
export PASSWORD
echo "What user do you want to add to Centrify?"
read CENTRIFY_USER
export CENTRIFY_USER
OBJECTSID=`ldapsearch -H ldap://my.domain.com:389 -D "$USERNAME@MY.REALM.COM" -w $PASSWORD -x -b "DC=my,DC=domain,DC=com" "(&(objectCategory=user)(sAMAccountName=$CENTRIFY_USER))" | grep objectSid | cut -d " " -f2`
SID=`/home/mydirectory/convert_objectSid_to_sid.sh $OBJECTSID`
export SID
echo "Adding user to Centrify..."
/home/mydirectory/add_users_to_centrify.sh
"add_users_to_centrify.sh"是随后调用的tcl脚本,但是我在tcl脚本中得到了错误error during execution: can't read "USERNAME": no such variable
。
内容如下:
#!/bin/sh
# \
exec adedit "[=12=]" ${1+"$@"}
package require ade_lib
puts $env(USERNAME)
puts $env(PASSWORD)
puts $env(SID)
puts $env(CENTRIFY_USER)
bind my.domain.com $USERNAME {$PASSWORD}
另一个问题,当调用 tcl 脚本时,我传递的所有参数都会被打印出来,包括密码。我原以为导出是最安全的方法,因为它应该只为这个子 shell 设置环境变量而不是打印它们。这里发生了什么?
正在打印密码,因为您明确打印了密码 (puts $env(PASSWORD)
)。
错误似乎很明显:tcl 脚本中没有名为USERNAME
的变量。您可以像这样设置一个(PASSWORD
也类似):
set USERNAME $env(USERNAME)
或者您可以直接使用环境变量:
bind my.domain.com $env(USERNAME) {$env(PASSWORD)}