2023년 5월 28일 일요일

source command in shell script

다음은 /root/.bashrc 내역.
  1 # .bashrc
  2
  3 # User specific aliases and functions
  4
  5 alias rm='rm -i'
  6 alias cp='cp -i'
  7 alias mv='mv -i'
  8 alias vi=vim
  9
 10 # Source global definitions
 11 if [ -f /etc/bashrc ]; then
 12   . /etc/bashrc
 13 fi

명령어 단축키를 추가해보자.
  1 # .bashrc
  2
  3 # User specific aliases and functions
  4
  5 alias rm='rm -i'
  6 alias cp='cp -i'
  7 alias mv='mv -i'
  8 alias vi=vim
9 alias la='ls -a'
 10
 11 # Source global definitions
 12 if [ -f /etc/bashrc ]; then
 13   . /etc/bashrc
 14 fi

source 명령을 이용해서 변경된 bash 환경 재적용. la 명령으로 ls -a의 실행 결과를 볼 수 있다.
[root@Centos7 ~]# source /root/.bashrc
[root@Centos7 ~]# la
. anaconda-ks.cfg .bash_logout .bashrc .pki .viminfo .vimrc .. .bash_history .bash_profile .cshrc .tcshrc .viminfo.tmp

이 작업을 스크립트로 처리하고 싶다

일단 쉘 테스트는 잘 됨.
[root@Centos7 ~]# sed -i "s/vim/vim\nalias la='ls -a'/" /root/.bashrc
[root@Centos7 ~]# cat /root/.bashrc # .bashrc # User specific aliases and functions alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' alias vi=vim alias la='ls -a' # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi
[root@Centos7 ~]# source /root/.bashrc
[root@Centos7 ~]# la
.   anaconda-ks.cfg  .bash_logout   .bashrc  .pki       .tcshrc   .viminfo.tmp
..  .bash_history    .bash_profile  .cshrc   script.sh  .viminfo  .vimrc

스크립트 생성 후 실행.
[root@Centos7 ~]# cat script.sh
#!/bin/bash

sed -i "s/vim/vim\nalias la='ls -a'/" /root/.bashrc
source /root/.bashrc
[root@Centos7 ~]# ./script.sh
[root@Centos7 ~]# la
-bash: la: command not found
[root@Centos7 ~]# cat /root/.bashrc
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias vi=vim
alias la='ls -a'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

안 된다(..) .bashrc는 변경됐으니 source 명령어가 적용되지 않았다는 얘기. source 명령어는 현재 사용자쉘, 스크립트는 별도 쉘에서 실행되기 때문인 듯. source 명령어로 스크립트를 실행시켜봤다.
[root@Centos7 ~]# source ./script.sh
[root@Centos7 ~]# la
.   anaconda-ks.cfg  .bash_logout   .bashrc  .pki       .tcshrc   .viminfo.tmp
..  .bash_history    .bash_profile  .cshrc   script.sh  .viminfo  .vimrc

댓글 없음:

댓글 쓰기

크리에이티브 커먼즈 라이선스