Posts executing .sh file
Post
Cancel

executing .sh file

복잡한 템플릿의 깃헙 블로그를 쓰다보면, Shell script(확장자가 .sh인 파일들)를 실행해야하는 일이 있습니다.
이번 글에서는 ubuntu(18.04)를 활용해서 이를 실행해보도록 하겠습니다.

Clone a Repo in Github on Ubuntu

이 부분은 일반적으로 git bash를 사용해서 작업할 때와 동일합니다.

깃헙으로부터 repository를 복사(clone)할 때 자동으로 깃헙 주소와 동일한 이름의 폴더에 만들어줍니다. 예를 들어, username.github.io의 폴더 안에 깃헙에 있는 모든 내용이 담기게되는 것입니다.

따라서 기본으로 생성되는 디렉토리에서 복사를 바로 해도 되지만, 저는 새로운 폴더를 만들어주고 그 안에다가 복사해놓겠습니다. 이유는 복사를 자주 하더라도 헷갈리지 않기 위함입니다.

따라서 아래와 같이 ubuntu 프롬프트에서 새로운 파일을 만들어줍니다.

1
mkdir UserFolder

이후에 해당 디렉토리로 이동하여 본격적으로 복사를 해옵니다.

1
2
cd UserFolder  
git clone https://github.com/UserName/UserName.github.io.git

repository 부분은 깃헙 페이지의 Clone or download를 눌러서 쉽게 복사해올 수 있습니다.


나중에 폴더가 많아져서 지우고 싶어진다면 아래 방법을 이용하면 됩니다.

1
sudo rm -r -f /path/


bash

원하는 Shell script가 있는 곳의 디렉토리를 잘 기억한 다음에 아래와 같이 입력해주면 됩니다.

1
bash UserDir/UserSh.sh

한 번에 잘 되면 좋지만 ubuntu에 설치되어 있는 패키지에 따라서 혹은, Shell script 안의 내용에 따라 잘 작동이 안 될 수가 있습니다. 가장 자주 등장하는 두 가지 문제를 해결해보도록 하겠습니다.

그 다음에는 일반적으로 git bash를 사용해서 add와 push를 하는 등 동일한 방법으로 작업을 할 수 있습니다.

1. python: command not found

python은 ubuntun에 없는데, 읽어야하는 sh 파일에는 python 코드가 들어있기 때문에 생기는 문제입니다. 당연히 python을 깔아주면 문제는 해결됩니다. 다만, ubuntu에서 python 버전 문제 때문에 설치가 쉽지 않습니다. 이 때에는 python3를 설치해주는 것으로 대체합니다.

설치 여부는 python 혹은 python3를 입력해주면 됩니다. 잘 설치가 되어있다면 버전 정보가 뜹니다.

그리고 반드시 Shell script의 command도 python에서 python3로 바꿔줘야 합니다. 같은 python이라고 해도 버전에 맞는 내용만 읽어줄 수 있기 때문입니다. 따라서 아래와 같은 방법으로 해결해줍니다.

nano UserDir/UserSh.sh

창이 바뀌면서 스크립트의 내용이 등장합니다. 이 곳에서 python을 찾아서 python3로 바꿔주면 됩니다.
바꾼 후에는 ctrl + s를 통해서 저장해주고
ctrl + x를 눌러서 다시 빠져나옵니다.

위의 방법으로 python 문제를 쉽게 해결할 수 있습니다.

2. $'\r': command not found

두 번째 문제도 일종의 버전 또는 호환의 문제입니다. 파일을 어느 운영체계에서 작성하고 읽느냐에 따라서 사소한 문법 차이가 발생하기 때문입니다. 이 경우에는 코드를 짤 때 사용한 줄 바꿈이 \r 문제가 되었기 때문입니다. 구체적으로 나의 코드가 어떻게 읽히고 있는지는 아래의 코드를 통해서 확인할 수 있습니다.

1
cat -v UserDir/UserSh.sh

위의 코드를 실행했을 때, 문장마다 ^M이 위치하고 있음을 확인할 수 있을 것입니다. 따라서 모든 문장에서 이를 제거하기 위해서 아래와 같이 sed1를 사용합니다.

1
$ sed -e "s/^M//" filename > newfilename

이 후에 다시 cat 코드를 통해 확인하면, 더 이상 ^M이 보이지 않음을 확인할 수 있습니다. 이후에 다시 bash를 입력하면 위의 문제는 발생하지 않을 것입니다.

결과적으로 모든 문제를 해결한 뒤에 bash를 입력하면 성공입니다. 마지막으로 git push를 해줌으로써 끝냅니다.


각주 및 참고문헌

[IGAWorks] Natural Language Processing

[Bokeh] Pie chart

Comments powered by Disqus.