Используйте двойные кавычки вместо одиночных кавычек.
sed -i "${line_no}..."
См. В Переполнение стека: разница между одиночными и двойными цитатами в Bash
Следующий сценарий сделал все это. Он не только загрузил и скомпилировал пакет GCC4.4, но также загрузил и скомпилировал необходимые зависимости. Вам может понадобиться установить #yum install zsh
перед запуском этого скрипта, так как этот скрипт работает под zsh shell. Спасибо Саймону Хеймлихеру (Simon Heimlicher) за то, что он сделал этот скрипт доступным на своем блоге.
#!/usr/bin/env zsh
# Download and compile GCC 4.4
set -ue
# Set minimal PATH to make sure we compile with the system compiler
export PATH=/usr/sbin:/usr/bin:/sbin:/bin
# Use bash as the shell for everything GNU
export CONFIG_SHELL=/bin/bash
# Set to true for verbose output
VERBOSE=${VERBOSE:=false}
out () { printf "\n%b\n\n" "$@" >&2 }
fail () { printf "\n%b\n\n" " $@ " >&2; exit 1 }
DSTROOT=${DSTROOT:=$HOME/local}
PKGROOT=${PKGROOT:=$DSTROOT/pkg}
SCRATCH=${SCRATCH:-$HOME/scratch}
SRCDIR=${SRCDIR:=$SCRATCH/gcc/src}
BUILDDIR=${BUILDDIR:=$SCRATCH/gcc/build}
GCC_URL=http://mirror.switch.ch/ftp/mirror/gnu/gcc/gcc-4.4.7/gcc-4.4.7.tar.bz2
GCC_PREREQUISITE_URLS=(
ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2
ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2
ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz
http://www.mr511.de/software/libelf-0.8.13.tar.gz
)
out "DSTROOT='$DSTROOT'
PKGROOT='$PKGROOT'
SRCDIR='$SRCDIR'
BUILDDIR='$BUILDDIR'"
runcmd() {
RUN_RET=0
RUN_CWD='.'
RUN_FORCE=false
o_cwd=''; o_force=''
zparseopts -D -K -- c:=o_cwd f=o_force -cwd:=o_cwd -force=o_force
if [[ $# -eq 0 ]]; then
print "Usage: runcmd [-f] <command line to run>" >&2
return 1
fi
if [[ -n $o_cwd ]]; then RUN_CWD=$o_cwd[2]; fi
if [[ -n $o_force ]]; then RUN_FORCE=true; fi
cmdline=$@
if $VERBOSE; then
print "Running\n ${(@)cmdline}\nRUN_FORCE=$RUN_FORCE RUN_CWD=$RUN_CWD" >&2
fi
( set +ue; cd $RUN_CWD && print ${(@)cmdline} | $CONFIG_SHELL -sue; )
RUN_RET=$?
if [[ $RUN_RET -ne 0 ]]; then
if $RUN_FORCE; then
print "\n### $cmdline\nexit $RUN_RET in CWD=$RUN_CWD\n" >&2
else
print "\n\n### $cmdline\nexit $RUN_RET in CWD=$RUN_CWD\nAbort." >&2
exit $RUN_RET
fi
fi
return $RUN_RET
}
prepare_pkg () {
local srcdir=$1
local url=$2
local pkgvers=${${url##*/}%.(tar*|zip)}
local pkg=${pkgvers%-*}
local vers=${pkgvers#*-}
local suffix=${${url##*/}##*.}
out "Fetching $pkgvers from $url"
case $suffix in
gz)
runcmd -c $srcdir curl -L $url \| tar xz
;;
bz2|tbz)
runcmd -c $srcdir curl -L $url \| tar xj
;;
zip)
runcmd -c $srcdir curl -L $url \| funzip
;;
*)
fail "Unknown archive format: $url"
;;
esac
if [[ ! -d $srcdir/$pkgvers ]]; then
fail "Extraction of download from $url failed"
fi
runcmd -c $srcdir ln -sf $pkgvers $pkg
}
if $VERBOSE; then
printf "Using system compiler: '%s'" $(which gcc)
gcc --version
fi
out "Making directories \n$DSTROOT\n$PKGROOT\n$SRCDIR\n$BUILDDIR"
runcmd mkdir -p $DSTROOT $PKGROOT $SRCDIR $BUILDDIR
GCC_PKG=${${GCC_URL##*/}%.(tar*|zip)}
GCC_SRC=$SRCDIR/$GCC_PKG
GCC_PREFIX=$PKGROOT/$GCC_PKG
GCC_BUILD=$BUILDDIR/$GCC_PKG-build
if [[ -d $GCC_SRC ]]; then
out "Using GCC downloaded at $GCC_SRC"
else
out "Downloading GCC"
prepare_pkg $SRCDIR $GCC_URL
fi
out "Downloading prerequisites"
for pkg ($GCC_PREREQUISITE_URLS); do
prepare_pkg $GCC_SRC $pkg
done
if [[ -d $GCC_BUILD ]]; then
out "Running 'make distclean' in $GCC_BUILD"
runcmd -c $GCC_BUILD -f make distclean
else
out "Making GCC build directory $GCC_BUILD"
runcmd mkdir -p $GCC_BUILD
fi
out "Configuring GCC"
runcmd -c $GCC_BUILD $GCC_SRC/configure --prefix=$GCC_PREFIX \
--enable-languages=c,c++,fortran \
--enable-threads=posix \
--enable-tls \
--enable-libgomp \
--enable-lto \
--enable-shared \
--enable-static \
--disable-nls \
--disable-multilib \
--with-fpmath=sse
out "Compiling GCC"
runcmd -c $GCC_BUILD make -j 8 all
out "Installing GCC"
runcmd -c $GCC_BUILD make -j 8 install
if which stow &>/dev/null; then
out "Using 'stow' to symlink GCC from $GCC_PKG"
runcmd -c $PKGROOT stow $GCC_PKG
else
out "Package manager 'stow' not found. GCC is installed in $GCC_PREFIX"
fi
print "All done"
При установке g++ с помощью yum, сам решает проблемы зависимостей.
Итак, попробуйте:
yum search g++
затем найдите pacjage из g++
, Когда вы хотите установить его, установите его depenecies. Одним из его depenecies является libstdc++
RHEL6
root@ibxsv-asnis1 ~]# rpm -q --provides libstdc++
libstdc++ = 4.4.4-15.el6
libstdc++.so.6()(64bit)
libstdc++.so.6(CXXABI_1.3)(64bit)
libstdc++.so.6(CXXABI_1.3.1)(64bit)
libstdc++.so.6(CXXABI_1.3.2)(64bit)
libstdc++.so.6(CXXABI_1.3.3)(64bit)
libstdc++.so.6(GLIBCXX_3.4)(64bit)
libstdc++.so.6(GLIBCXX_3.4.1)(64bit)
libstdc++.so.6(GLIBCXX_3.4.10)(64bit)
libstdc++.so.6(GLIBCXX_3.4.11)(64bit)
libstdc++.so.6(GLIBCXX_3.4.12)(64bit)
libstdc++.so.6(GLIBCXX_3.4.13)(64bit)
libstdc++.so.6(GLIBCXX_3.4.2)(64bit)
libstdc++.so.6(GLIBCXX_3.4.3)(64bit)
libstdc++.so.6(GLIBCXX_3.4.4)(64bit)
libstdc++.so.6(GLIBCXX_3.4.5)(64bit)
libstdc++.so.6(GLIBCXX_3.4.6)(64bit)
libstdc++.so.6(GLIBCXX_3.4.7)(64bit)
libstdc++.so.6(GLIBCXX_3.4.8)(64bit)
libstdc++.so.6(GLIBCXX_3.4.9)(64bit)
libstdc++ = 4.4.7-4.el6
libstdc++(x86-64) = 4.4.7-4.el6
[root@ibxsv-asnis1 ~]# rpm -q libstdc++
libstdc++-4.4.7-4.el6.x86_64