[질문] 셀에서 cd 명령어와 비슷한 역할을 하는 프로그램...

pray4shoo의 이미지

안녕하세요.. 시스템 프로그래밍을 공부하는 학생인데요..

리눅스 셀에서 cd 명령어와 비슷한 역할을 하는 프로그램을 만들려고 합니다.

다른 여러가지 기능들도 있겠지만 정작 문제가 되는게..

system 함수중에 chdir로 디렉토리를 바꾸더라도 현재 실행중인 프로세스

에만 적용이 되고.. 그 프로세스가 종료되면.. 결국 변하는건 아무것도 없다는..

예를 들어서 제가 test라는 프로그램을 만들었습니다.
물론 내부적으론 chdir함수를 사용했구요..

그리고 셀에서 $test /bin 하더라도 그 프로그램을 실행했던 그 디렉토리 상태

그대로 란 거죠..

여기저기 검색도 해보고 책도 읽어보고 했지만 잘 모르겠네요...

clone라는 함수를 이용해서 부모프로세스와 자식프로세스의 메모리 공간,파일시스템등을 공유할수 있는 방법이 있다고 들은것도 같은데.. 어떻게 사용해야 할지를 모르는.ㅡ.ㅡ;;

아니면 자식 프로세스에서 부모프로세스의 어떤 기능을 이용할수 있는 방법같은건 없을까요? test에서 부모 셀의 cd를 이용할수 있는 방법....

어렵네요...^^;;;

도와주세요..ㅠ.ㅠ

monpetit의 이미지

shell도 알고 보면 마찬가지입니다.
shell도 다른 프로그램과 마찬가지로 하나의 프로세스이며, 실행되는 동안에는 여러 디렉토리로 옮겨 다니지만 종료되면 변한 건 없습니다.
cd는 다른 프로그램이 아니라 shell 내부 명령어라는 사실을 잊지 마세요. 다른 프로세스를 생성하여 디렉토리를 바꾼 게 아니라는 점 말입니다.

cinsk의 이미지

결론부터 말하면 없습니다.

그렇다고 절망?하지 마시고, 한가지 방법이 있긴 합니다. GNU mc가 이용하는 방법인데, 먼저 shell에서 mc는 alias로 다음과 같이 정의되어 있습니다.

alias mc='. $MC_DIR/bin/mc-wrapper.sh'

즉, 사용자가 mc를 실행하면, 현재 shell이 mc-wrapper.sh를 읽어서 실행합니다. (child proc을 만들어 실행하는 것이 아닙니다.) 이 때, mc-wrapper.sh는 특정 파일 이름을 /usr/bin/mc에게 전달해 주고, 이 mc는 바꾸고자 하는 디렉토리를 그 파일에 저장합니다. 그리고 mc가 끝나면, mc-wrapper.sh가 그 내용을 읽어서 디렉토리를 바꿉니다. 자세한 것은 mc를 설치하고 그 소스를 보시면 알 수 있습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.