유닉스 과제 질문
글쓴이: 익명 사용자 / 작성시간: 일, 2019/06/02 - 10:30오후
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 자체가 명령이 아닌 문자로 출력될꺼 같아서 ``를 쓴건데, 틀린건가요...
무엇이 문제인건가요..
Forums:
파이썬3 subprocess 문법으로 해보니 `` 먹히네요,,,
덧: try/except 문법을 아직 잘 모릅니다.
바로잡아주심에 미리 감사드립니다^^^
꾸벅,,,
1. <code> block 좀 쓰세요.
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 에서 동작하지 않는
placeholder 가 IE10 에서 동작하지 않는 함정이 있습니다. 아직 IE 9/10 사용자가 꽤 되나 보다 생각하고 있습니다.
댓글 달기