Bitcoin Forum
May 05, 2024, 08:25:39 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Verständnisproblem mit SH Scripten  (Read 834 times)
SpAcEDeViL (OP)
Legendary
*
Offline Offline

Activity: 986
Merit: 1027


Miner-Control.de Pooler


View Profile WWW
May 06, 2016, 07:38:12 PM
 #1

Moin Moin,

ich habe ein leichtes Verständnisproblem mit einem oder mehreren *.sh Scripten unter Linux, Ubuntu.

Und zwar mit "while read" schleifen.

ich habe mehrere Scripte in denen diese Schleifen eingebaut sind. Allerdings wird vor der Schleife nicht definiert, was in dieser Schleife ist.
Also nicht wie z.b. bei einem Array oder so, in der Schleife wird zwar auf auf die Definition zugegriffen, aber nie gefüllt.

Also, woher weiß das Script was dort gesetzt werden muss?


Hier das Script: https://github.com/UNOMP/unified-node-open-mining-portal/issues/109

Ich hoffe jemand kann mich erleuchten Wink *gg*

1714940739
Hero Member
*
Offline Offline

Posts: 1714940739

View Profile Personal Message (Offline)

Ignore
1714940739
Reply with quote  #2

1714940739
Report to moderator
1714940739
Hero Member
*
Offline Offline

Posts: 1714940739

View Profile Personal Message (Offline)

Ignore
1714940739
Reply with quote  #2

1714940739
Report to moderator
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
1714940739
Hero Member
*
Offline Offline

Posts: 1714940739

View Profile Personal Message (Offline)

Ignore
1714940739
Reply with quote  #2

1714940739
Report to moderator
1714940739
Hero Member
*
Offline Offline

Posts: 1714940739

View Profile Personal Message (Offline)

Ignore
1714940739
Reply with quote  #2

1714940739
Report to moderator
1714940739
Hero Member
*
Offline Offline

Posts: 1714940739

View Profile Personal Message (Offline)

Ignore
1714940739
Reply with quote  #2

1714940739
Report to moderator
e-coinomist
Legendary
*
Offline Offline

Activity: 2380
Merit: 1085


Money often costs too much.


View Profile
May 07, 2016, 03:47:18 AM
 #2


tip mal in der shell "help read" ein dann siehst du das dort die Variablennamen folgen die mit den Zeilen aus
Code:
done< <(/usr/local/bin/redis-cli hkeys Coin_Algos)
gefüttert werden. Das
Code:
<<()
Konstrukt ist spezifisch für die Bash, wenn du das Script mit "sh script" aufrufst läuft das vor die Wand weil sich dann das gleiche Shell Binary anders/Kompatibel verhält. Oh da war etwas, da bin ich mir grad nicht sicher. /bin/sh ist hoffnungslos veraltet, da gibt es keine
Code:
[[ =~ ]]
regexp Vergleiche, da ist sogar teils noch [ ein Softlink /usr/bin/[ der auf /bin/test zeigt etc.

Quote
"while read CoinName"
CoinName is empty...
^^ nein ist es nicht, CoinName ist die Variable die bei jedem while Durchlauf mit der nächsten Zeile aus redis-cli hkeys Coin_Names_"$line" gefüttert. Wenn es leer bleibt, dann kommt aus redis-cli kein Output heraus.
Code:
done< <(/usr/local/bin/redis-cli hkeys Coin_Names_"$line")

Shell Scripte debuggen ist ätzend. Versuche dir die Variableninhalte auszugeben,
Code:
while read WorkerName
do
    echo "DEBUG: WorkerName = $WorkerName"

und dann den ganzen Output in ein file geben, bash script.sh |& tee logfile.txt
Du kannst dir auch Breakpoints basteln, habe dafür so ein ~/bin/breakpoint.sh das macht etwas leicht anderes, davon brauchst du eher den echo press enter; read -r -s -n 1 CHR Teil. Pack dir das in eine function() im gleichen Script, oder bastell dir ein debug.sh mit den functions für Variableninhalte auszugeben und Breakpoints setzen.

Code:
#!/bin/sh

#exec quoted
"$@"
res=$? ;# and store error condition

if [ $res -ne 0 ]; then
  echo "command FAILED with error"
fi

#wait for user, our purpose
echo -en "\n...press [Enter] to continue"
read -r -s -n 1 CHARACTER ;# read 1 byte

if [ $res -ne 0 ]; then
  #exec /usr/bin/false
  exit $res ;# hand over error condition value
fi


Code:
now="$(date +"%s")"
braucht kein Escaping, der output von /usr/bin/date dürfte kein Element aus IFS enthalten. Solltest aber besser PATH absichern falls da Überaschungen aufwarten.

Code:
length=$(echo "$endtime - $starttime" | bc -l)
braucht dann auch keinen Unterprozess /usr/bin/bc forken, die Integerarithmetik kann die Shell selbst,
Code:
length=$[$endtime - $starttime]

okay, bei dayslength geht es in die Fliesskommarithmetik mit 3 Nachkommastellen da ist das Konstrukt okay.
e-coinomist
Legendary
*
Offline Offline

Activity: 2380
Merit: 1085


Money often costs too much.


View Profile
May 07, 2016, 03:51:21 AM
Last edit: May 07, 2016, 05:26:21 PM by e-coinomist
 #3

Code:
function breakpoint()
{
    local CHARACTER
    echo -en "press [Enter] to continue"
    read -r -s -n 1 CHARACTER ;# read 1 byte
    if [[ ! $CHARACTER =~ \n ]]; then echo; fi
}

Kann man auch mit dem Ellenbogen auf SPACE, Hand unter dem Kinn durchkloppen

Code:
#use:
#vardump variablename1 variablename2 variablename3
function vardump()
{
    local var value
    while [ $# -gt 0 ]; do
        var="$1"
        value=$(eval "echo \$${var}")
        shift
        echo "DEBUG $var=$value"
    done
}
SpAcEDeViL (OP)
Legendary
*
Offline Offline

Activity: 986
Merit: 1027


Miner-Control.de Pooler


View Profile WWW
May 07, 2016, 01:03:17 PM
 #4

HY!

Besten DANK! Da bin ich nun einen Schritt weiter!
Das erklärt auch einiges. Zb. das die Leute bei UNOMP etliches undokumentiert haben.

Profitpool bewerben, aber nichts passenden geliefert, bzw. alles offen gelassen.... grausam.


Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!