除了脚本错误 - 执行时关闭引用后的额外字符

时间:2014-11-18 16:24:02

标签: bash shell scripting sh except

我写了一个除了脚本ssh到不同的服务器并更改.bash_profiles。在我的代码中,我面临着sed命令的问题并且遇到错误。

关闭引用后的额外字符     执行时 “发送”sed -i'/ TERM / a \ COL_YELLOW =“$(tput setaf 3)”'。bash_profile_backup \ r“         期待eof“

我尝试了所有组合,但它不起作用。我知道它有一个小的缩进问题。如果有人可以请求帮助代码。

操作系统 - RHEL6.2。

代码

for server in $(cat temp.lst);
do
{
expect -c "
    spawn ssh -t -t "nmehta\@$server"
    expect "?assword:"
    send \"$password\r\"
    send \"\r\"
    expect "?nmehta@?"
    send \"sudo -u oracle -i\r\"
    sleep 5
    expect "?assword:"
    send \"$password\r\"
    sleep 5
    send \"cp .bash_profile .bash_profile_backup\r\"
    send \"sed -i.bck 's/vt100/xterm/g' .bash_profile_backup\r\"
    send \"sed -i '/TERM/a \COL_YELLOW=\"\$(tput setaf 3)\"' .bash_profile_backup\r\"
    send \"sed -i '/TERM/a \COL_END="$(tput sgr0 1)"' .bash_profile_backup\r\"
    expect eof"
}
done

1 个答案:

答案 0 :(得分:0)

尝试不同的缩进我终于能够执行如下脚本了。

PATH=$PATH:$ORACLE_HOME/bin:/usr/bin
export PATH

password=test123
export password

export TEMP_1='\"\$(tput setaf 3)\"'
export TEMP_1

export TEMP_2='\"\$(tput sgr0 1)\"'
export TEMP_2

TEMP_3="PS1='\''\\\${HOSTNAME} \[\\\$ORACLE_SID\] \\\$PWD> '\''"
export TEMP_3

for server in $(cat temp.lst);
do
{
expect -c "
     spawn ssh -t -t "nmehta\@$server"
    expect "?assword:"
    send \"$password\r\"
    send \"\r\"
    expect "?nmehta@?"
    send \"sudo -u oracle -i\r\"
    sleep 5
    expect "?assword:"
    send \"$password\r\"
    sleep 5
    send \"cp .bash_profile .bash_profile_backup\r\"
    send \"sed -i.bck s/vt100/xterm/g .bash_profile_backup\r\"
    send \"sed -i '/TERM/a \COL_YELLOW=$TEMP_1' .bash_profile_backup\r\"
    send \"sed -i '/TERM/a \COL_END=$TEMP_2' .bash_profile_backup\r\"
    expect eof"
}
done