如何将变量从bash脚本传递到TCL?

时间:2018-06-14 14:00:01

标签: bash tcl centrify

我之前从未使用过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 "$0" ${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设置环境变量而不打印它们。这里发生了什么?

1 个答案:

答案 0 :(得分:2)

密码正在打印,因为您明确打印了密码(puts $env(PASSWORD))。

错误似乎非常明确:名为USERNAME的tcl脚本中没有变量。你可以像这样设置一个(对PASSWORD也是如此):

set USERNAME $env(USERNAME)

或者您可以直接使用环境变量:

bind my.domain.com $env(USERNAME) {$env(PASSWORD)}