View previous topic :: View next topic |
Author |
Message |
disi Veteran
Joined: 28 Nov 2003 Posts: 1354 Location: Out There ...
|
Posted: Sun Jul 08, 2012 8:56 am Post subject: [Scripting] funktioniert auf shell aber nicht im Skript? |
|
|
Ich versuche hier etwas zu automatisieren aber habe Probleme mit den String, irgendwie?!?
Hier mal das Skript:
Code: | #!/usr/local/bin/zsh
#/usr/local/bin/bash
DIR="/tank1/data/backup/postgresql"
DATABASES=$(su -m pgsql -c 'psql -l')
echo ${DATABASES}
LIST=$(echo ${DATABASES} | awk '{ print $1}' | grep -vE '^-|^List|^Name|template[0|1]|^\(|^\|')
echo ${LIST}
|
echo ${DATABASES}, da gibt er noch die Namen aus
echo ${LIST}, hier ist die Variable leer
Auf der Kommandozeile tut er:
Code: | disi-disk# DATABASES=$(su -m pgsql -c 'psql -l'); echo ${DATABASES}; LIST=$(echo ${DATABASES} | awk '{ print $1}' | grep -vE '^-|^List|^Name|template[0|1]|^\(|^\|'); echo ${LIST}
List of databases
Name | Owner | Encoding | Collation | Ctype | Access privileges
-----------+----------+----------+-----------+-------+-------------------
my_wiki | postgres | UTF8 | C | C |
postgres | pgsql | UTF8 | C | C |
template0 | pgsql | UTF8 | C | C | =c/pgsql +
| | | | | pgsql=CTc/pgsql
template1 | pgsql | UTF8 | C | C | =c/pgsql +
| | | | | pgsql=CTc/pgsql
(4 rows)
my_wiki
postgres
|
Wie ihr seht, habe ich auch Bash versucht, kein Unterschied _________________ Gentoo on Uptime Project - Larry is a cow |
|
Back to top |
|
|
disi Veteran
Joined: 28 Nov 2003 Posts: 1354 Location: Out There ...
|
Posted: Sun Jul 08, 2012 9:09 am Post subject: |
|
|
Arrrggghhh, ich hatte es immer so gestartet:
also nimmt er /bin/sh und unter FreeBSD ist das auch sh und kuemmert sich nicht im die erste Zeile welche Shell er nehmen soll
//edit: vermutlich braucht er absolute Paths fuer grep etc?!? Damit es sauber ist und portable...
//edit: stimmt ja:
Code: | % ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Jun 24 22:50 /bin/sh -> bash |
Man wird irgendwann zu faul in Linux... _________________ Gentoo on Uptime Project - Larry is a cow |
|
Back to top |
|
|
toralf Developer
Joined: 01 Feb 2004 Posts: 3922 Location: Hamburg
|
Posted: Sun Jul 08, 2012 1:41 pm Post subject: |
|
|
disi wrote: |
//edit: vermutlich braucht er absolute Paths fuer grep etc?!? Damit es sauber ist und portable... | wohl eher für psql |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6747
|
Posted: Sun Jul 08, 2012 6:55 pm Post subject: |
|
|
Dein Script ist Shell-unabhängig, außer dass ggf. "${DATABASES}" gequoted werden sollte - dass zsh automatisch quotet dürfte der einzige Unterschied sein.
Solange Du nur POSIX-Optionen benutzt (was du tust) würde ich keine absoluten Pfade für "awk" und "grep" benutzen (außer Du hast Angst, dass jemand Dein Script mit verbogenem PATH aufruft, um ein eigenes Kommando einzuhängen - für diese Probleme sollte man allerdings besser an anderer Stelle ansetzen).
Wenn Du schon sowieso awk benutzt, solltest Du auch das "grep" von awk benutzen.
Zum eigentlichen Problem habe ich außer der erwähnten fehlenden Quotes keine Idee. |
|
Back to top |
|
|
toralf Developer
Joined: 01 Feb 2004 Posts: 3922 Location: Hamburg
|
Posted: Sun Jul 08, 2012 7:00 pm Post subject: |
|
|
Ich stochere auch nur im Nebel herum, dabei fällt mir dies hier auf : Code: | #/usr/local/bin/bash |
kann nixht funktionieren, da fehlt ein "!".
Außerdem immer daran denken, daß es nicht hilft, die shebang Zeile auszukommentieren, da ein "#!" nur in der ersten Zeile einer Datei eine spezielle Auswertung erfährt. |
|
Back to top |
|
|
disi Veteran
Joined: 28 Nov 2003 Posts: 1354 Location: Out There ...
|
|
Back to top |
|
|
|