Toon posts:

[bash] syntax error near unexpected token `('

Pagina: 1
Acties:
  • 207 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Soms worden er bestanden aangemaakt als apache binnen de home dir van de user. Daardoor kan de user bijvoorbeeld een bestand niet deleten.
Bij het uitvoeren van dit script om de eigenaar van file id userdirs in 1 x goed te zetten:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/sh

cd "/home"

/bin/ls -1|while read user
do
/usr/bin/find "/home/$user" ( -user apache -or -perm -2 ) -print |
while read line
do
if [ -f "$line" ]; then
/bin/chown "$user:apache" "$line"
/bin/chmod 775 "$line"
echo File: $line $user
else
# We should user user:user on directories because otherwise files would be
# created with httpd group which would cause safe_mode to stop execution.
/bin/chown "$user:apache" "$line"
/bin/chmod 775 "$line"
echo Directory: $line $user
fi
done
done

Krijg ik deze error:
code:
1
2
3
[root@c003 sider]# ./autoshown2.csh
./autoshown2.csh: line 7: syntax error near unexpected token `('
./autoshown2.csh: line 7: `/usr/bin/find "/home/$user" ( -user apache -or -perm -2 ) -print |'

Heb het scriptje geschreven in vi. Bash geeft hetzelfde probleem.

Alvast bedankt voor alle input..

[ Voor 1% gewijzigd door een moderator op 14-05-2007 13:29 . Reden: code-tags toegevoegd zodat het leesbaar wordt ]


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Waarom lees je de foutmelding niet dan? Het is mij vrij duidelijk dat je die haken moet escapen. Overigens moet ik de eerste user nog tegenkomen die iets niet kan verwijderen uit zijn homedir; als eigenaar van de directory kun je alles eruit mikken wat je wil :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Verwijderd

Topicstarter
Spider.007 schreef op maandag 14 mei 2007 @ 12:30:
Waarom lees je de foutmelding niet dan? Het is mij vrij duidelijk dat je die haken moet escapen. Overigens moet ik de eerste user nog tegenkomen die iets niet kan verwijderen uit zijn homedir; als eigenaar van de directory kun je alles eruit mikken wat je wil :)
het probleem is juist dat als ik een subdir aanmaak in de homedir van een user deze daar niet automatisch owner van is.
Als ik dus zegmaar via svn bijvoorbeeld gallery2 installeer in een users zijn home dir dan zijn het nogal wat dirs die als owner apache hebben.

Wel heel stom van het niet escapen! zo overheen gekeken.. na het escapen geeft het script de melding voor elke dir "no such file or directory"

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Verwijderd schreef op maandag 14 mei 2007 @ 13:19:
[...]


het probleem is juist dat als ik een subdir aanmaak in de homedir van een user deze daar niet automatisch owner van is.
Als ik dus zegmaar via svn bijvoorbeeld gallery2 installeer in een users zijn home dir dan zijn het nogal wat dirs die als owner apache hebben.
Aha; ja, als je zo wilt werken kunnen daar dingen foutgaan ja.
Wel heel stom van het niet escapen! zo overheen gekeken.. na het escapen geeft het script de melding voor elke dir "no such file or directory"
Waarom debug je dat probleem dan niet? Je cd't naar /home; maar vervolgens find je in /home/$user. Vervolgens bevat $line dus niet die $user prefix terwijl je daar wel execute. Oftewel; cd naar $user of prefix $line met $user :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 01-02 22:15

SA007

Moderator Tweaking
Zoals je script btw nu is kan je het hele dingen vervangen door:

cd /home
chown -R $user:apache $user
chmod -R 775 $user

volgens mij doet dat ook wat jij wil of mis ik hier wat?

Al zou ik die chmod veranderen door rwX zodat niet alle files executable worden
quote: man chmod
execute only if the file is a directory or already has execute permission for some user (X)

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 01-02 13:45

deadinspace

The what goes where now?

Verwijderd schreef op maandag 14 mei 2007 @ 12:25:
Heb het scriptje geschreven in vi. Bash geeft hetzelfde probleem.
Aangezien het een sh-script is wordt het vrijwel standaard door bash uitgevoerd, dus hoezo "geeft bash hetzelfde probleem"?

En als het een sh-script is, waarom geef je het dan de extensie .csh? ;)

En waarom precies die -perm -2 test? (ik kan me voorstellen dat je geen world-writable files wil zien, maar op deze manier worden die wel gechowned naar $user:apache, is dat de bedoeling?)
SA007 schreef op maandag 14 mei 2007 @ 16:00:
Zoals je script btw nu is kan je het hele dingen vervangen door:

cd /home
chown -R $user:apache $user
chmod -R 775 $user
Dat is niet helemaal waar; zijn script maakt alleen aanpassingen aan files die van apache zijn of die world-writable zijn, jouw versie past alle files aan.
Al zou ik die chmod veranderen door rwX zodat niet alle files executable worden
Dat is dan wel weer een goed punt :P

Ikzelf zou het script overigens ongeveer zo maken:
code:
1
2
3
4
5
6
7
8
9
10
11
#! /bin/sh

for HOMEDIR in /home/*
do
    # Get the username of the owner of this homedir
    OWNER=$(stat -c %U "${HOMEDIR}")
    # Chown/chmod apache-owned files
    find "${HOMEDIR}" -user apache -exec chown "${OWNER}:apache" '{}' \; -exec chmod u=rwX,g=rwX,o=rX '{}'  \;
    # Make sure no directories/files are world-writable
    chmod -R o-w "${HOMEDIR}"
done

dat is volgensmij wat sneller, overzichtelijker en robuuster :)

Als performance belangrijk is, en je weet zeker dat je over GNU find en GNU xargs beschikt, dan kun je daar de dingen nog wat mee verbeteren.
Pagina: 1