【发布时间】:2019-09-09 07:27:46
【问题描述】:
我想了解为什么 ssh 不将 $PATH 设置为 .profile 中确定的任何内容,但似乎在 ssh 使用 EOF 时会这样做。
我想在我的脚本中运行这一行:
DIR_EXPANDED=`ssh $TOADDRESS "$(typeset -f get_dir); get_dir $DIR $DBNAME"`
get_dir 的定义如下:
function get_dir() {
DIRECTORY_NAME=$1
DBNAME=$2
if [ -z "$DIRECTORY_NAME" ]; then
echo "Enter Directory Name:"; read DIRECTORY_NAME
elif [ -n "$2" ]; then
. oraenv $DBNAME
fi
DIRECTORY=`sqlplus -s '/ as sysdba' << EOF
set pages 0 head off feed off
select directory_path from all_directories where directory_name='$DIRECTORY_NAME';
EOF`
echo $DIRECTORY;
}
但是,运行脚本会导致错误
ksh[10]: .: oraenv: cannot open [No such file or directory]
我发现是因为 ssh'ing 时路径设置不正确,如下所示:
ssh $TOADDRESS 'echo $PATH'
/usr/local/bin:/usr/bin
通过反复试验,我发现这是可行的:
TODIR_EXPANDED=`ssh $TOADDRESS << EOF
$(typeset -f get_dir); get_dir $TODIR $TODBNAME
EOF`
有人能解释一下为什么 ssh 会这样工作吗?以及如何/是否可以使用我首先描述的单线?
【问题讨论】: