유닉스 과제 질문

익명 사용자의 이미지

1 #! /bin/bash
2
3 today=2019-05-21
4
5 if [ who | grep `echo $(today)` ] ; then
6
7 who | grep `echo $(today)`
8
9 else
10
11 who
12
13 fi

제 목적은 변수에 선언된 날짜와 같은 날짜로 로그인되어있는 사람이 있으면 7번과 같은 명령을 수행하고 아니면 그냥 who 명령을 수행하는 것입니다.

여기서 질문은 5번에서 변수를 출력해서 명령 인자로 넣고 싶은데 저렇게 하는게 맞나요(물론 안됩니다만)

저는 echo를 해서 변수를 출력하면 echo 자체가 명령이 아닌 문자로 출력될꺼 같아서 ``를 쓴건데, 틀린건가요...

무엇이 문제인건가요..

파이썬3의 이미지

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
 
import subprocess
 
today="2019-05-21"
p = subprocess.Popen("who | grep `echo {}`".format(today), stdout=subprocess.PIPE, universal_newlines=True, shell=True)
lst = p.stdout.readlines()
 
if len(lst) != 0:
    for v in lst:
        print(v)
else:
    try:
        subprocess.call("who", shell=True)
    except:
        print("Unknown Error...")

덧: try/except 문법을 아직 잘 모릅니다.
바로잡아주심에 미리 감사드립니다^^^
꾸벅,,,

익명 사용자의 이미지

1. <code> block 좀 쓰세요.

글쓰기 칸 아래의 안내만으로 부족해서 글쓰기 칸 placeholder 텍스트로도 안내하고 있는데, 아무도 눈여겨보지 않는 듯하군요.

사소한 텍스트라도 꼼꼼히 읽고 확인해보는 게 프로그래머의 중요한 덕목 중 하나 아니던가요? 제대로 읽어보지도 않고 "막 뭐라뭐라 뜨면서 안돼요 ㅜㅜ" 하는 사람들이 얼마나 많던지요. 슬픈 일이지요.

왼쪽 line number도, 코드를 복사해서 실행해 보려고 할 때 꽤 성가셔서 그냥 답변을 안 하고 싶게 만든답니다.

2. 전반적으로 overthinking이 너무 심합니다.

일단 $(today)부터가 의미불명이고, 왜 `로 감쌌는지도 모르겠고, 왜 [를 썼는지도 모르겠네요.

(1) 모든 유닉스 유틸리티는 exit status로 성공 여부를 반환합니다.
그 성공 여부라는 게 정확히 뭘 의미하는지는 유틸리티마다 달라서 man page를 참조해야 합니다만, grep의 경우에는 "검색 문자열이 하나라도 발견 되었는가 아닌가" 일 거라고 짐작해볼 수 있겠지요.
물론 실제로 사용하기 전에 꼭 확인해 봐야 합니다.

(2) bash에서 pipeline으로 연결된 명령어 시퀀스 전체의 exit status는 마지막 명령어의 status와 같습니다.
일견 합리적입니다. 성공 여부가 정말로 중요한 명령어는 보통 파이프라인의 맨 마지막에 있으니까요.
본 질문글의 경우에도 그렇고요.

(3) (optional) grep은 디폴트로 검색 문자열이 있는 라인을 출력하는데, 이 경우에는 그게 필요가 없으니 man page를 찾아서 이 출력을 꺼 버립시다.
찾아보면 -q flag를 주면 된다는 사실을 알 수 있습니다.

이상의 과정으로부터 결국 필요한 bash code는 if who | grep -q "$today"; then 라는 사실을 알 수 있지요.

김정균의 이미지

placeholder 가 IE10 에서 동작하지 않는 함정이 있습니다. 아직 IE 9/10 사용자가 꽤 되나 보다 생각하고 있습니다.

댓글 달기

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