2016-06-27 2 views
0

간단한 bash 스크립트를 작성하고 싶습니다. 입력은 "HH : mm"문자열 출력 내가 date 명령을 사용하여 생각했다 입력에서 남은 초를 얻으십시오 : bash (OSX)에서 mm HH : mm

$ getsec.sh 12:55 # now it's 12:30. so 25 minutes left. 
1500 

예를

을 위해, 그 시간에 초 남아있는 것 아마이의 솔루션입니다. 그러나 내가 사용할 수있는 간단한 방법이 존재하지 않는 것 같습니다. (일부 답변을 확인 후 추가)


그것은 date 명령과 같은

은 OS 및 버전에 따라 달라집니다.
나는 OSX를 사용하며, 제안 된 대답의 결과는 다음과 같다.

$ date -d '12:55' '+%s' 
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... 
      [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format] 
+2

아하 그렇습니다. OSX는 FreeBSD'date'를 GNU date가 아니라고 생각합니다. –

답변

2

* 표시의 BSD (및 OSX) date 명령 등 브루와 OSX, 핑크, 등 많은 다른 플랫폼 (리눅스에서 유비쿼터스하고 있습니다 GNU date, 이외의 다른 옵션의 구문이).

now=$(date -j +%s) 
then=$(date -j -f '%H:%M' 12:55 +%s) 
echo "$((then-now)) seconds left" 

휴대용 솔루션의 경우 휴대용 스크립트 언어를 대신 사용할 수 있습니다.

+0

주제 끄기 :'-d'는'GNU'와'BSD'에서 다른 것을 의미합니다. ('GNU'' -d'는'BSD'' -j'입니다.) 긴 옵션 (이 경우'--date')을 사용하는 것이 더 나은 방법입니까? 그 긴 옵션은 알 수없는 옵션이라고하기 때문에 & argument는 잘못된 방법으로 인수를 해석하는 대신 실패 할 것입니다. – anishsane

+0

@anishsane 날짜가 정식 형식이어야합니다. 그렇지 않으면'-f' 옵션을 전달해야합니다. 또한'-j'의 의미는 무관하다. 이 옵션이 없으면 * BSD'date'는 시스템 클럭을 설정하려고 시도합니다. – tripleee

1

당신은 할 수 있습니다 :

ts=$(date -d '12:55' '+%s') 
now=$(date '+%s') 

diff=$((ts-now)) 
+0

주제 끄기 :'-d'는'GNU'와'BSD'에서 다른 것을 의미합니다. 긴 옵션 (이 경우'--date')을 사용하는 것이 더 나은 방법입니까? 그 긴 옵션은 알 수없는 옵션이라고하기 때문에 & argument는 잘못된 방법으로 인수를 해석하는 대신 실패 할 것입니다. – anishsane

1

이 스크립트는 매개 변수로 스크립트에 액세스 명령 줄 인수로 목표 시간 (수용 $1

#!/bin/bash 

current_time=$(date +%s) 
target_time=$(date +%s --date="$1") 

# evaluate the difference using an arithmetic expression 
echo "seconds remaining to target time: "$((target_time - current_time)) 

사용 :

% ./get_sec.sh "22:00" 

출력 :

seconds remaining to target time: 16151 
관련 문제