ubuntuusers.de

Unterschiede zwischen bin/bash und bin/sh

Status: Ungelöst | Ubuntu-Version: Ubuntu 22.04 (Jammy Jellyfish)
Antworten |

barnybla

Anmeldungsdatum:
21. Juli 2021

Beiträge: 22

Ich habe ein fertiges #!/bin/sh script und möchte dort aus einem vorhandenen anderen Script (#!/usr/bin/env bash) eine Ausgabe in eine Logdatei einfügen. Dort sieht der Befehl so aus:

1
2
3
4
5
6
##
## Ausgabe in Logdatei schreiben
##

exec > >(tee -i ${LOG})
exec 2>&1

Nun bekomme ich, wenn ich das direkt so einfüge, eine Fehlermeldung:

1
shell - Syntax error: redirection unexpected 

Nun habe ich mit der sh shell keine Erfahrung und weiß nich wie der Befehl dort aussehen muss. Kann mir da jemand helfen?

Gruß Bernd

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13174

So geht es in der sh:

1
2
3
4
5
6
7
8
9
#!/bin/sh

{
  exec 2>&1
  # Beispiele:
  date
  echo error >&2
  echo on
} | tee -i log

barnybla

(Themenstarter)

Anmeldungsdatum:
21. Juli 2021

Beiträge: 22

Danke für die schnelle Antwort, ich habe es gleich eingebaut, aber ich glaube ich muss die mal das ganze script zeiden. Es handelt sich um ein mailcow backup script:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/bin/sh

# Backup mailcow data
# https://mailcow.github.io/mailcow-dockerized-docs/b_n_r_backup/

set -e

##
## Setzten von Variablen
##

# LOG="/var/log/mailcow/mailcow.log"
OUT="$(mktemp)"
export MAILCOW_BACKUP_LOCATION="/opt/backup"
SCRIPT="/opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh"
PARAMETERS="backup all"
OPTIONS="--delete-days 3"

##
## Ausgabe in Logdatei schreiben
##

{
  exec 2>&1
  # Beispiele:
  date
  echo error >&2
  echo on
} | tee -i "/var/log/mailcow/mailcow.log"

echo "###### Backup gestartet: $(date) ######"

# run command
set +e
"${SCRIPT}" ${PARAMETERS} ${OPTIONS} 2>&1 > "$OUT"
RESULT=$?

if [ $RESULT -ne 0 ]
    then
            echo "${SCRIPT} ${PARAMETERS} ${OPTIONS} encounters an error:"
            echo "RESULT=$RESULT"
            echo "STDOUT / STDERR:"
            cat "$OUT"
fi

echo "###### Backup beendet: $(date) ######"
~

Es wird ein log geschrieben, aber es sind nur diese Einträge vorhanden:

1
2
3
Do 6. Okt 16:29:58 UTC 2022
error
on

Das backup läuft aber einwandfrei. Also ist da noch etwas falsch. Kannst du mir bitte noch einmal helfen?

Gruß Bernd

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13174

barnybla schrieb:

Es wird ein log geschrieben, aber es sind nur diese Einträge vorhanden:

1
2
3
Do 6. Okt 16:29:58 UTC 2022
error
on

Ja, das ist natürlich nur Beispielcode, wie ich im Kommentar geschrieben habe.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17604

Wohnort: Berlin

rklm schrieb:

Ja, das ist natürlich nur Beispielcode, wie ich im Kommentar geschrieben habe.

1
echo on

Beispielcode für echo unter DOS? 😉

scnr

Antworten |