Как передать переменные из скрипта bash в 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, который затем вызывается, но я получаю ошибку error during execution: can't read "USERNAME": no such variable в сценарии tcl.

Вот содержание этого:

#!/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-скрипт, печатаются все аргументы, которые я передаю, включая пароль. Я думал, что экспорт будет самым безопасным способом сделать это, поскольку он должен только устанавливать переменные среды для этой подоболочки, а не печатать их. Что тут происходит?

1 ответ

Решение

Пароль печатается, потому что вы явно печатаете пароль (puts $env(PASSWORD)).

Ошибка кажется очень ясной: в скрипте tcl нет переменной с именем USERNAME, Вы можете установить один такой (и аналогично для PASSWORD):

set USERNAME $env(USERNAME)

Или вы можете просто использовать переменные окружения напрямую:

bind my.domain.com $env(USERNAME) {$env(PASSWORD)}
Другие вопросы по тегам