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