Portál AbcLinuxu, 15. května 2025 15:10
Zdravim.
Snazim sa o spravny zapis v tomto pripade:
#! /bin/bash
DATE="$(which date)"
NOW_CMD="$DATE +%s"
TODAY_CMD="$DATE +%F"
TOMORROW_CMD="$DATE -d tomorrow +%F"
# potialto je to v poriadku
# toto uz ale v poriadku nie je
SINCE="$DATE "$($TODAY_CMD) ${1}" +%s"
Potrebujem dostat vzdy aktualny cas v cykle a preto takto. Ci je to ten najidealnejsi sposob, neviem, ale ...
Vysledok vyssie uvedeneho prikladu je takyto:
pato@debian:~$ bash -x ./test.bash 15:00
++ which date
+ DATE=/bin/date
+ NOW_CMD='/bin/date +%s'
+ TODAY_CMD='/bin/date +%F'
+ TOMORROW_CMD='/bin/date -d tomorrow +%F'
++ /bin/date +%F
+ SINCE='/bin/date 2010-10-31'
+ '15:00 +%s'
./test.bash: line 50: 15:00 +%s: command not found
Ako ho donutit, aby to 15:00 bral ako vstup pre date a nie ako novy prikaz? Tusim v kostiach, ze to bude trivialne, ale mna tu nic nenapada momentalne. Dakujem.
Řešení dotazu:
$ date "2010-10-31 15:00" +%s date: nadbytečný operand „+%s“ Více informací získáte příkazem „date --help“.což nedává smysl. Můžete to nejdřív objasnit?
Presne, ja tomu rozumiem, co sa tam deje. Moj problem je, ako takemuto chovaniu zabranit/predist? Keby ste uvodzil hodnoty pre date, aby sa chovali ako jeden retazec, tak by dal spravny vysledok. Ako toto ale aplikovat do mojho postupu z prveho prispevku?
""
treba escapnut, alebo prepisat na:
DATE="`which date`" # ; just in case
NOW_CMD="`$DATE +%s`"
TODAY_CMD="`$DATE +%F`"
TOMORROW_CMD="`$DATE -d tomorrow +%F`"
SINCE="`$DATE $($TODAY_CMD $1) +%s`"
pricom tie uvodzovky su tam pre istotu, keby naahodou date cmd bol v nestandardnej ceste, napr /usr/very\ nasty\ location/bin
pricom "2010-10-31 15:00"
je blbost
Dakujem za prispevok, ale mam par pripomienok:
1. Co je blbost na tomto: "2010-10-31 15:00" ?
Skus toto:
date --date "2010-10-31 15:00" +%s
2. Ako escapujes ty? Lebo ja ziadne escapovanie nevidim v tvojej uprave.
3. V podstate si prepisal com som dal ja a plus jedna chyba. (ale to sa mi hovori, ked ja som mal vo svojom skriptu od zaciatku)
K tej chybe, toto je tvoje:
SINCE="`$DATE $($TODAY_CMD $1) +%s`"
co sa da zapisat aj takto:
SINCE="$(date --date $(date +%F 15:00) +%s)"
Spravne to je v mojom rieseni, je nutne prv vykonat date +%F a az potom pridat 15:00 k tomu. ;)
Toto je o tom prepisani vlastne;
VAR1="`date +%s`"
VAR2="$(date +%s)"
echo "$VAR1"
echo "$VAR2"
Tie sposoby zapisu su totiz ekvivalentom. Akurat ten druhy je lepsie citatelny a je mozne vnorovat dalsie a dalsie prikazy. Vid vlastne moje riesenie tejto temy. ;)
Kazdopadne, ziadna zast ani cokolvek ineho necitim. Snazil si sa pomoct, cenim si to a to je tak vsetko.
"2010-10-31 15:00"
je datum a cas :) moja chyba
ja som hore uviedol,ze je mozne pouzit alt. zapis, kde sa potom nestratis v uvodzovkach (alebo aspon nie tak rychlo)date --date
-> to uz ale meni podstatu toho, co ten script ma robit - preto som sa pytal, ze co chces dosiahnut a povedal, ze cmd "datum 14:00" je blbost .. v spojeni s prepinacom --date je to vsak uz cosi ine
hlavne, ze si to vyriesil :)
Ok, rozumiem. Ale popravde, to o tej blbosti mi pomohlo paradoxne najviac. Som ti chcel dat ten priklad a sa ukazalo, ze mi tam chybalo to --date. Samozrejme uplne vsade. :)
Co sa ale tyka toho alternativneho zapisu, mne nepride az taky prehladny. ;) Ale mozno vec nazoru.
Dobry den
Nepomohly by zpetne lomitka ?
SINCE="$DATE \"$($TODAY_CMD) ${1}\" +%s"
Dakujem, to som uz skusal, zial to nepomaha. Samotna hodnota SINCE je sice v spravnom tvare aj uvodzenie je spravne, ale pri jeho vykonani opat nastane rovnaky problem. Vid nizsie:
DATE="$(which date)"
NOW_CMD="$DATE +%s"
TODAY_CMD="$DATE +%F"
TOMORROW_CMD="$DATE -d tomorrow +%F"
# potialto je to v poriadku
# toto uz ale v poriadku nie je
SINCE="$DATE \"$($TODAY_CMD) ${1}\" +%s"
$SINCE
a vysledok:
pato@debian:~$ bash -x ./test.bash 15:00
++ which date
+ DATE=/bin/date
+ NOW_CMD='/bin/date +%s'
+ TODAY_CMD='/bin/date +%F'
+ TOMORROW_CMD='/bin/date -d tomorrow +%F'
++ /bin/date +%F
+ SINCE='/bin/date "2010-10-31 15:00" +%s'
+ /bin/date '"2010-10-31' '15:00"' +%s
/bin/date: extra operand `15:00"'
Try `/bin/date --help' for more information.
Kazdopadne dakuje, sam som to nespomenul predtym.
Vyriesene. Chyba bola trivialna, spravna syntax pre konvert daneho casu je nasledovna:
date --date "cas" +%[moznosti] # z hlavy som to pisal a nejak som pozabudol
Takze riesenie bolo uz v prvom mojom prispevku v poriadku, az na tu malickost:
DATE="$(which date)"
NOW_CMD="$DATE +%s"
TODAY_CMD="$DATE +%F"
TOMORROW_CMD="$DATE -d tomorrow +%F"
for INDEX in {1..9}
do
SINCE="$($DATE --date "$($TODAY_CMD) ${1}:0${INDEX}" +%s)"
sleep 1
done
a vysledok je presne ako som pozadoval, s kazdou jednou iteraciou ziskat aktualny cas:
pato@debian:~$ bash -x ./test.bash 14:00
++ which date
+ DATE=/bin/date
+ NOW_CMD='/bin/date +%s'
+ TODAY_CMD='/bin/date +%F'
+ TOMORROW_CMD='/bin/date -d tomorrow +%F'
+ for INDEX in '{1..9}'
+++ /bin/date +%F
++ /bin/date --date '2010-10-31 14:00:01' +%s
+ SINCE=1288533601
+ sleep 1
+ for INDEX in '{1..9}'
+++ /bin/date +%F
++ /bin/date --date '2010-10-31 14:00:02' +%s
+ SINCE=1288533602
+ sleep 1
+ for INDEX in '{1..9}'
+++ /bin/date +%F
++ /bin/date --date '2010-10-31 14:00:03' +%s
+ SINCE=1288533603
+ sleep 1
+ for INDEX in '{1..9}'
+++ /bin/date +%F
++ /bin/date --date '2010-10-31 14:00:04' +%s
+ SINCE=1288533604
+ sleep 1
+ for INDEX in '{1..9}'
+++ /bin/date +%F
++ /bin/date --date '2010-10-31 14:00:05' +%s
+ SINCE=1288533605
+ sleep 1
+ for INDEX in '{1..9}'
+++ /bin/date +%F
++ /bin/date --date '2010-10-31 14:00:06' +%s
+ SINCE=1288533606
+ sleep 1
+ for INDEX in '{1..9}'
+++ /bin/date +%F
++ /bin/date --date '2010-10-31 14:00:07' +%s
+ SINCE=1288533607
+ sleep 1
+ for INDEX in '{1..9}'
+++ /bin/date +%F
++ /bin/date --date '2010-10-31 14:00:08' +%s
+ SINCE=1288533608
+ sleep 1
+ for INDEX in '{1..9}'
+++ /bin/date +%F
++ /bin/date --date '2010-10-31 14:00:09' +%s
+ SINCE=1288533609
+ sleep 1
Takze uz je to v poriadku. Dakujem vsetkym.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.