쉘 관련 질문입니다.

하하의 이미지

왜 쉘 스트립트가 fopen 같은 기능을 할 수 없는지?

할 수 없다면 .. 왜 못하는지.. 고수님들 설명해 주세요.. ㅋ

kokids의 이미지

하하 wrote:
왜 쉘 스트립트가 fopen 같은 기능을 할 수 없는지?

할 수 없다면 .. 왜 못하는지.. 고수님들 설명해 주세요.. ㅋ

파일 디스크립터 같은 걸 원하시는 건가요? 못하지는 않아요. 이를테면,

파일 디스크립터 3번으로 열려면,

exec 3> foo.txt

4번으로 열려면 이렇게 하겠죠.

exec 4> bar.txt

결과를 3번 디스크립터 쪽으로 보내려면

echo "이것은 표준 출력을 3번 디스크립터 즉 foo.txt로 보냅니다." >&3

4번 디스크립터 쪽으로는 ls의 출력을 보내봅시다.

ls -al >&4

다 썼으니 닫아야 겠죠. 3번 디스크립터 즉 foo.txt를 닫으려면

exec 3>&-

라고 하면 되고 4번 디스크립터 즉 bar.txt를 닫으려면

exec 4>&-

하면 되겠습니다.

이외에도 디스크립터끼리 join하는 것도 있으니 bash(1)을 참고하시길.

타면자건(唾面自乾)

하하의 이미지

좀 엉뚱한 질문이지만 ..

흐.. 이럼 되겠네요 왜 쉘에는 api가 없는 걸까요?

파일 조작을 위한 fopen , write, socket , socketopt 같은..

이 이유를 알면 될 듯 합니다.. - - ;;

너무 엉뚱한가요? ㅋ

PS : 님의 위 예제에서 exec는 C 에서의 exec() 함수를 뜻하는 건가요?

넘 쉘 스트립트에 대한 이해가 없는듯.. ㅠㅠ

“바람에게도 길은 있다. 나는 비로소 나의 길을 가느니. 길은 언제나 어디에나 있다.”

랜덤여신의 이미지

쉘 스크립트라는 것은, M$ 도스의 배치 파일하고 비슷한 역할을 한다고 생각하시면 됩니다.
즉, 쉘 스크립트 파일의 모든 내용을 쉘상으로 사용자가 직접 한줄 한줄씩 복사해서 그대로 친다면, 똑같은 기능을 한다는 것입니다.

예컨데, 다음과 같은 간단한 스크립트가 있습니다:

#!/bin/bash

for x in *
do
    echo $x
done

이 스크립트를 파일로 만들어서 한번 실행시켜 보세요.
또, 스크립트의 내용 중 맨 윗줄인 #!/bin/bash 를 제외하고, 각 줄을 커맨드 창에 하나하나 직접 입력해 보세요.
하하의 이미지

ㅎ..

exec 를 man 해보니깐..

exec, eval, source - shell built-in functions to execute other commands

다음과 같은 문구가 shell built-in 이라고.

어떻게 shell이 exec 를 구현 했을까요?

설마 exec() function을 바로 호출은 못할거 같은데.

무슨 방법이 있나요? ㅋ..

“바람에게도 길은 있다. 나는 비로소 나의 길을 가느니. 길은 언제나 어디에나 있다.”

pynoos의 이미지

주제를 바꿔주세요. 질문은 이상하지 않은데 주제가 이상합니다. :D

segfault의 이미지

하하 wrote:
exec, eval, source - shell built-in functions to execute other commands

다음과 같은 문구가 shell built-in 이라고.

어떻게 shell이 exec 를 구현 했을까요?

설마 exec() function을 바로 호출은 못할거 같은데.

무슨 방법이 있나요? ㅋ..

말 그대로 Built-in이죠

쉘에 내장된 명령입니다.

이를테면 쉘에 내장된 exec 명령이 쉘 내부에서 exec() 시스템콜을 호출하는 식이죠.

ssehoony의 이미지

저 같은 경우 저수준의 api 들이 필요할 경우는 php 로 쉘스크립트를 만듭니다.
펄이나 파이썬을 하실 수 있다면 그것도 좋을 듯 하네요.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.