我写了一个除了脚本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
答案 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