Αποστολή αρχείων με δικαιώματα εγγραφής στα μέλη ενός τμήματος

Ξεκίνησε από Δημήτρης Γκίνης, 14 Δεκ 2011, 11:15:14 ΠΜ

« προηγούμενο - επόμενο »

Δημήτρης Γκίνης

Δεδομένου ότι έχω δημιουργήσει 9 τμήματα (a1, a2,a3, b1,b2,b3,c1,c2,c3),
και για κάθε τμήμα 12 λογαριασμούς όσοι και οι clients (πχ a1-1, a1-2...a1-12, b1-1,b1-2,...,b1-12 κλπ),
αν θέλω να στείλω όλα τα αρχεία που βρίσκονται πχ στον φάκελο /home/teacher/ΑΠΟΣΤΟΛΗ
στους προσωπικούς φακέλους των μελών ενός τμήματος πχ του a1
(δηλ  στους φακέλους /home/a1-1,       /home/a1-2/,    /home/a1-3/,    ..../home/a1-12/ )
πως θα έπρεπε να γραφτεί το σχετικό script το οπίο να παίρνει ως παράμετρο το όνομα του τμήματος??
Θα προτιμούσα να έχουν δικαίωμα εγγραφής στο αρχείο αυτό

arliba

Παράθεση από: Δημήτρης Γκίνης στις 14 Δεκ 2011, 11:15:14 ΠΜ
Δεδομένου ότι έχω δημιουργήσει 9 τμήματα (a1, a2,a3, b1,b2,b3,c1,c2,c3),
και για κάθε τμήμα 12 λογαριασμούς όσοι και οι clients (πχ a1-1, a1-2...a1-12, b1-1,b1-2,...,b1-12 κλπ),
αν θέλω να στείλω όλα τα αρχεία που βρίσκονται πχ στον φάκελο /home/teacher/ΑΠΟΣΤΟΛΗ
στους προσωπικούς φακέλους των μελών ενός τμήματος πχ του a1
(δηλ  στους φακέλους /home/a1-1,       /home/a1-2/,    /home/a1-3/,    ..../home/a1-12/ )
πως θα έπρεπε να γραφτεί το σχετικό script το οπίο να παίρνει ως παράμετρο το όνομα του τμήματος??
Θα προτιμούσα να έχουν δικαίωμα εγγραφής στο αρχείο αυτό

Η απάντηση αφορά το απλο script, το bourne-shell .
Καταλαβαίνεις ότι ένα script είναι bourne, γιατί ξεκινάει από
#!/bin/sh

την παράμετρο την περνάς γράφοντας το όνομα του script, μετά κενό , και μετά την παράμετρο.
Δηλαδή:

/Home/myscript a1-1

μέσα στο script, την τιμή a1-1 την χειρίζεσαι σαν $1

ομοίως

/Home/myscript a1-1 a2-1

oι μεταβλητές που χειρίζεσαι μέσα στο script είναι οι $1 $2

κλπ $3 $4 για περισσότερες μεταβλητές.

Η $0 νομίζω είναι το ίδιο το όνομα του script δηλαδή αν μέσα στο script γράψεις
echo $0

θα σου βγάλει ως απάντηση
/Home/myscript

ενώ φυσικά αν μέσα στο script γράψεις
echo $1

θα σου βγάλει την πρώτη παράμετρο (δηλαδή το a1-1 στην περίπτωσή μας)


Τώρα καμιά φορά όταν δεν περνάει ο ειδικός χαρακτήρας / από το $1 θα πρέπει να το γράψεις σαν \/ ή ακόμα και \\/ ανάλογα το nesting που κάνεις
στο script σου.
"Ευτυχώς, το στέκι είναι (τελικά) μια όαση Δημοκρατίας" -- Keep Growing
Μετά το law-bay.com, καιρός είναι να πάμε και για το law-bay.edu !
Το υπουργείο κυνοβολευτικής υγείας προειδοποιεί: Τα κείμενα που προκύπτουν από ψηφοφορίες. προκαλούν σύγχυση, θυμό, εφίδρωση και υψηλούς καρδιακούς σφυγμούς σε όσους πάσχουν από ψηφοφοβία.

Δημήτρης Γκίνης

@arliba: Καταρχάς ευχαριστώ για την απάντηση.
Αυτό με την παράμετρο το είχα καταλάβει βλέποντας άλλα script.(btw το όνομα του τμήματος είναι a1,b1 κλπ)
Αυτό που δεν ξέρω είναι :
1) πως συντάσσεται  η for ώστε να εκτελεστεί 12 φορές (μία κάθε ένα από τα μέλη του τμήματος - παραμέτρου του script)
2) πως θα γραφτεί η εντολή για την αντιγραφή πχ:
cp -r /home/teacher/APOSTOLH/* /home/$1-$i/ (σωστό είναι αυτό??)



arliba

Παράθεση από: Δημήτρης Γκίνης στις 14 Δεκ 2011, 12:06:39 ΜΜ
@arliba: Καταρχάς ευχαριστώ για την απάντηση.
Αυτό με την παράμετρο το είχα καταλάβει βλέποντας άλλα script.(btw το όνομα του τμήματος είναι a1,b1 κλπ)
Αυτό που δεν ξέρω είναι :
1) πως συντάσσεται  η for ώστε να εκτελεστεί 12 φορές (μία κάθε ένα από τα μέλη του τμήματος - παραμέτρου του script)
2) πως θα γραφτεί η εντολή για την αντιγραφή πχ:
cp -r /home/teacher/APOSTOLH/* /home/$1-$i/ (σωστό είναι αυτό??)

http://steve-parker.org/sh/loops.shtml

Θα σου έλεγα να μην χρησιμοποιείς το /bin/sh αλλά καλύτερα το /bin/csh
ή ακόμα και κάποιο ευκολότερο κέλυφος ή και perl ή Python.

Ειδικά για το /bin/sh έχουν σημασία ακόμα και τα κενα, όταν γράφεις κώδικα και συντάσεις τις εντολές.
Δηλαδή αν αφήσεις δύο κενά αντί για ένα , δεν τρέχει.

Επίσης στο shell, καμιά φορά, ανάλογα την εντολή πρέπει το $1 να το βαλεις σε μονό ' ή διπλό " quote .
Και φυσικά προσοχή στους ειδικούς χαρακτήρες, το / είναι ειδικός χαρακτήρας και μέσα στον κώδικα
των εντολών (π.χ. της if) αντιμετωπίζεται με \, δηλαδή \/
"Ευτυχώς, το στέκι είναι (τελικά) μια όαση Δημοκρατίας" -- Keep Growing
Μετά το law-bay.com, καιρός είναι να πάμε και για το law-bay.edu !
Το υπουργείο κυνοβολευτικής υγείας προειδοποιεί: Τα κείμενα που προκύπτουν από ψηφοφορίες. προκαλούν σύγχυση, θυμό, εφίδρωση και υψηλούς καρδιακούς σφυγμούς σε όσους πάσχουν από ψηφοφοβία.

alkisg

Δημήτρη ανεβάζω ένα script ονόματι group-exec το οποίο είναι πιο γενικής χρήσης και θα πρέπει να υπερκαλύπτει τις ανάγκες σου. Φτιάξε ένα φάκελο /home/teacher/bin/ και βάλ' το εκεί μέσα, και μην ξεχάσεις να το κάνεις εκτελέσιμο με chmod +x /home/teacher/bin/group-exec

Παράδειγμα εκτέλεσης:
group-exec a1,a2 cp '/home/teacher/Επιφάνεια εργασίας/Άσκηση 1.pdf' 'Επιφάνεια εργασίας/'

Να παρατηρήσω όμως σε αυτό το σημείο, ότι εναλλακτικά θα μπορούσες να διαλέξεις τους συνδεδεμένους μαθητές μέσα από τα sch-scripts, και να κάνεις εκτέλεση εντολής, και στο διάλογο που θα εμφανιστεί να γράψεις απλά
cp "/home/teacher/Επιφάνεια εργασίας/Άσκηση 1.pdf" "$ΗΟΜΕ/Επιφάνεια εργασίας/"
Αυτό βέβαια εκτελεί την εντολή μόνο για το συνδεδεμένο τμήμα π.χ. a1, οπότε θα πρέπει να το ξανακάνεις μόλις ξανασυνδεθεί το επόμενο τμήμα π.χ. a2.

Κώδικας του group-exec:
Κώδικας: Bash
#!/bin/sh
# Copyright (C) 2011-2019 Alkis Georgopoulos <github.com/alkisg>

die () {
	echo "$@" >&2
	exit 1
}

usage() {
	die "Usage:
	group-exec group1,groupN command params

Executes a command for all users in the specified groups.
The command is executed from the user accounts, with sudo.
Make sure that you escape any special shell characters, so that they're
evaluated from the target user shell, not from the initial shell.

Example:
	group-exec a1,a2 cp '/home/teacher/Public/Exercise1.odt' 'Desktop/'
Copies an exercise from the teacher Public dir to the students' Desktop dir.
"
}

group_members() {
# Echoes the members of the specified groups, while removing any duplicates.
	set $(echo "$1" | tr ',' ' ')
	for group
	do
		getent group "$group" | cut -d':' -f4 | tr ',' '\n'
	done | sort -u | tr '\n' ' ' | sed  's/^ //;s/ $/\n/'
}

test $# -gt 1 || usage
members=$(group_members "$1")
test -n "$members" || die "No users found in these groups: $1"
shift

# Require a password the next time sudo is ran.
sudo -k

# Do the actual work.
for user in $members; do
	echo "Executing: sudo -i -u $user --" "$@"
	sudo -i -u "$user" -- "$@"
done


Υ.Γ. το sh δεν διακρίνει μεταξύ πολλών ή ενός κενού ως μέρος του συντακτικού του, δηλαδή το `ls file` είναι το ίδιο με το `ls      file`. Εννοείται βέβαια ότι όλα τα προγράμματα λαμβάνουν υπόψη τους τα κενά που υπάρχουν στις ίδιες τις παραμέτρους, δηλαδή το `ls "file 1"` είναι διαφορετικό από το `ls "file     1"`.
Παρεμπιπτόντως, προσωπικά δεν προτείνω τη χρήση csh.

Δημήτρης Γκίνης

Σας ευχαριστώ όλους για τις απαντήσεις. Θα τα δοκιμάσω αύριο.

arliba

και προσοχή στα κενά ανάμεσα! 

μπορεί το
ls file να είναι το ίδιο με το ls   file

αλλά σε διάφορες συντάξεις if , for, while , ιδίως όταν χρησιμοποιείς το [  κλπ δεν ισχύει πάντα αυτό.

οπότε για να είσαι σίγουρος, μην αφήνεις παραπάνω από ένα κενό όταν δεν χρειάζεται.
"Ευτυχώς, το στέκι είναι (τελικά) μια όαση Δημοκρατίας" -- Keep Growing
Μετά το law-bay.com, καιρός είναι να πάμε και για το law-bay.edu !
Το υπουργείο κυνοβολευτικής υγείας προειδοποιεί: Τα κείμενα που προκύπτουν από ψηφοφορίες. προκαλούν σύγχυση, θυμό, εφίδρωση και υψηλούς καρδιακούς σφυγμούς σε όσους πάσχουν από ψηφοφοβία.

alkisg

Παράθεση από: arliba στις 14 Δεκ 2011, 06:39:50 ΜΜ
αλλά σε διάφορες συντάξεις if , for, while , ιδίως όταν χρησιμοποιείς το [  κλπ δεν ισχύει πάντα αυτό.

οπότε για να είσαι σίγουρος, μην αφήνεις παραπάνω από ένα κενό όταν δεν χρειάζεται.

Μπορείς να μας δώσεις ένα παράδειγμα όπου το ένα κενό είναι διαφορετικό από τα δύο κενά, στη σύνταξη κάποιας από τις εντολές που ανέφερες;

arliba

Παράθεση από: alkisg στις 14 Δεκ 2011, 09:22:32 ΜΜ
Μπορείς να μας δώσεις ένα παράδειγμα όπου το ένα κενό είναι διαφορετικό από τα δύο κενά, στη σύνταξη κάποιας από τις εντολές που ανέφερες;

είπα να προσέχει τα κενά

από ότι θυμάμαι το
if [ $x -eq 4 ]

δεν ήταν το ίδιο με το
if[$x -eq 4]

ούτε καν με το
if [$x -eq 4]

χτυπούσε error. και ξέρεις τι error χτυπάει, ψάξε βρες!

Τώρα που το ξαναβλέπω, τα λιγότερα κενά ήταν συνήθως το πρόβλημα και όχι τα περισσότερα.

αλλά έχω καιρό να γράψω σε sh.
το διόρθωσαν;
"Ευτυχώς, το στέκι είναι (τελικά) μια όαση Δημοκρατίας" -- Keep Growing
Μετά το law-bay.com, καιρός είναι να πάμε και για το law-bay.edu !
Το υπουργείο κυνοβολευτικής υγείας προειδοποιεί: Τα κείμενα που προκύπτουν από ψηφοφορίες. προκαλούν σύγχυση, θυμό, εφίδρωση και υψηλούς καρδιακούς σφυγμούς σε όσους πάσχουν από ψηφοφοβία.

alkisg

Παράθεση από: arliba στις 14 Δεκ 2011, 10:37:49 ΜΜ
Τώρα που το ξαναβλέπω, τα λιγότερα κενά ήταν συνήθως το πρόβλημα και όχι τα περισσότερα.

αλλά έχω καιρό να γράψω σε sh.
το διόρθωσαν;

Δεν το διόρθωσαν, ποτέ τα περισσότερα κενά δεν ήταν πρόβλημα.

Για το [, ενημερωτικά, δεν είναι ειδικός χαρακτήρας σαν την παρένθεση, αλλά είναι εξωτερική εντολή:
Κώδικας: shell
$ which [
/usr/bin/[

$ /usr/bin/[ --help
Usage: test EXPRESSION
...


Γι' αυτό και το [κάτι είναι λάθος αν δεν βάλεις κενό ανάμεσα, γιατί ψάχνει εξωτερική εντολή με όνομα εκτελέσιμου [κάτι, το οποίο δεν υπάρχει.

(παραλείπω επίτηδες την ενσωματωμένη υλοποίηση του [ για απλούστευση της εξήγησης)

arliba

Παράθεση από: alkisg στις 14 Δεκ 2011, 11:08:02 ΜΜ

Γι' αυτό και το [κάτι είναι λάθος αν δεν βάλεις κενό ανάμεσα, γιατί ψάχνει εξωτερική εντολή με όνομα εκτελέσιμου [κάτι, το οποίο δεν υπάρχει.

(παραλείπω επίτηδες την ενσωματωμένη υλοποίηση του [ για απλούστευση της εξήγησης)

αυτό λέω, είναι πράγματα αυτά να πάει να γράψει καποιος αρχάριος την if, και να πετάει syntax error επειδη δεν έβαλε ένα κενό; To ίδιο ισχύει και στην while.

και δεν είναι το μόνο, και σε άλλα μου έβγαζε θυμάμαι error όταν έγραφα, αλλά δεν θυμάμαι ποια είναι τώρα να σου πω.

Η συμβουλη παραμένει λοιπον. Προσοχή στα κενά, ειδικά στα λιγότερα σίγουρα.

Παράθεση από: alkisg στις 14 Δεκ 2011, 11:08:02 ΜΜ
ποτέ τα περισσότερα κενά δεν ήταν πρόβλημα.
Για αυτό που λες για τα περισσότερα κενά
π.χ. στην for

for i in 1 2 3 4 5
do

είναι το ίδιο με το

for i in 1                   2                              3 4 5 do

χωρίς να είμαι σίγουρος βέβαια...μαλλον και αυτό δεν θα παίξει.

"Ευτυχώς, το στέκι είναι (τελικά) μια όαση Δημοκρατίας" -- Keep Growing
Μετά το law-bay.com, καιρός είναι να πάμε και για το law-bay.edu !
Το υπουργείο κυνοβολευτικής υγείας προειδοποιεί: Τα κείμενα που προκύπτουν από ψηφοφορίες. προκαλούν σύγχυση, θυμό, εφίδρωση και υψηλούς καρδιακούς σφυγμούς σε όσους πάσχουν από ψηφοφοβία.

arliba

Και για να μην τα λέμε όλα στραβά για το shell , η άποψή μου είναι ότι ναι μεν
έχει χάλια σύνταξη και δεν κάνει για αρχαρίους, αλλά έχει μια μεγάλη δύναμη που δεν την
βρίσκεις εύκολα αλλού.

το |

αυτό δημιουργεί νέα proccess (όπου το stdin της μιας επικοινωνεί με το stdout της άλλης),
οπότε αν έχεις cluster κατάλληλα διαμορφωμένο (π.χ. με το LinuxPMI),
μπορείς να στείλεις την μια process στο ένα μηχάνημα και την άλλη στο άλλο.

Με αποτέλεσμα να τρέχει το shell απίστευτα σφαίρα με τα process να εκτελούνται παράλληλα και
ταυτόχρονα σε δύο ή και παραπάνω μηχανήματα.

Λίγες γλώσσες μπορούν να το κάνουν αυτό , με μια μόνο γραμμή κώδικα να μπορούν
να τρέχουν τόσο εύκολα σε δύο ή και παραπάνω μηχανήματα, ταυτόχρονα και παράλληλα.
"Ευτυχώς, το στέκι είναι (τελικά) μια όαση Δημοκρατίας" -- Keep Growing
Μετά το law-bay.com, καιρός είναι να πάμε και για το law-bay.edu !
Το υπουργείο κυνοβολευτικής υγείας προειδοποιεί: Τα κείμενα που προκύπτουν από ψηφοφορίες. προκαλούν σύγχυση, θυμό, εφίδρωση και υψηλούς καρδιακούς σφυγμούς σε όσους πάσχουν από ψηφοφοβία.

exanemou

ΠαράθεσηΔημήτρη ανεβάζω ένα script ονόματι group-exec το οποίο είναι πιο γενικής χρήσης και θα πρέπει να υπερκαλύπτει τις ανάγκες σου. Φτιάξε ένα φάκελο /home/teacher/bin/ και βάλ' το εκεί μέσα, και μην ξεχάσεις να το κάνεις εκτελέσιμο με chmod +x /home/teacher/bin/group-exec

Παράδειγμα εκτέλεσης:
group-exec a1,a2 cp '/home/teacher/Επιφάνεια εργασίας/Άσκηση 1.pdf' 'Επιφάνεια εργασίας/'

Να παρατηρήσω όμως σε αυτό το σημείο, ότι εναλλακτικά θα μπορούσες να διαλέξεις τους συνδεδεμένους μαθητές μέσα από τα sch-scripts, και να κάνεις εκτέλεση εντολής, και στο διάλογο που θα εμφανιστεί να γράψεις απλά
cp "/home/teacher/Επιφάνεια εργασίας/Άσκηση 1.pdf" "$ΗΟΜΕ/Επιφάνεια εργασίας/"
Αυτό βέβαια εκτελεί την εντολή μόνο για το συνδεδεμένο τμήμα π.χ. a1, οπότε θα πρέπει να το ξανακάνεις μόλις ξανασυνδεθεί το επόμενο τμήμα π.χ. a2.
   
α)εφτιαξα το παραπανω κομμάτι κωδικα ακολουθώντας τις οδηγιες αλλα δεν αντιγραφηκε το αρχειο που επιθυμουσα είτε προσπαθώντας να το αποστειλω σε δυο τμήματα είτε σε ένα
β)δοκιμασα και την εναλλακτικη λυση με τα sch-scripts και πάλι ...τίποτα
γ)δοκιμασα και το παρακάτω
Παράθεσηfor f in /home/*/Επιφάνεια\ εργασίας; do
    if [ ! -e "$f/Υλικό μαθήματος" ]; then
        sudo ln -s "$HOME/Δημόσια" "$f/Υλικό μαθήματος"
    fi
done
αλλα ο φακελος υλικο δημιουργηθηκε μονο στην επιφάνεια εργασιας του server και σε κανεναν χρηστη Τι κανω λάθος;

exanemou


Δημήτρης Γκίνης

Το ίδιο μου εμφάνιζε και εμένα την πρώτη φορά που το δοκίμασα, κάτι έγραφα λάθος αλλά δεν θυμάμαι τι. Αύριο που θα ξαναμπώ στο εργαστήριο θα ποστάρω ένα δικό μου παράδειγμα για να το συγκρίνεις.

apapakL

Απ' ότι βλέπω στο μήνυμα λάθους, εκτελείς

group-exec c1,c2 cp '/home/teacher/Επιφάνεια Εργασίας/πιστα.sb' 'Επιφάνεια εργασίας/'


Το directory όμως Επιφάνεια Εργασίας δεν υπάρχει... αφού η λέξη εργασίας θέλει πεζό έψιλον και όχι κεφαλαίο. Και αυτό γιατί το Linux «είναι» case sensitive.

Άρα ο σωστός τρόπος εκτέλεσης θα ήταν

group-exec c1,c2 cp '/home/teacher/Επιφάνεια εργασίας/πιστα.sb' 'Επιφάνεια εργασίας/'


Αν το εκτελέσεις όντας συνδεδεμένοι οι χρήστες των συγκεκριμένων τάξεων, κάνε και ένα refresh (πατώντας F5) στην επιφάνεια εργασίας τους.

Δημήτρης Γκίνης


exanemou

ευχαριστώ για την βοηθεια και ιδιως για αυτο
ΠαράθεσηΑν το εκτελέσεις όντας συνδεδεμένοι οι χρήστες των συγκεκριμένων τάξεων, κάνε και ένα refresh (πατώντας F5) στην επιφάνεια εργασίας τους.
αν και διαβάζοντας αυτο
ΠαράθεσηΝα παρατηρήσω όμως σε αυτό το σημείο, ότι εναλλακτικά θα μπορούσες να διαλέξεις τους συνδεδεμένους μαθητές μέσα από τα sch-scripts, και να κάνεις εκτέλεση εντολής, και στο διάλογο που θα εμφανιστεί να γράψεις απλά
cp "/home/teacher/Επιφάνεια εργασίας/Άσκηση 1.pdf" "$ΗΟΜΕ/Επιφάνεια εργασίας/"
Αυτό βέβαια εκτελεί την εντολή μόνο για το συνδεδεμένο τμήμα π.χ. a1, οπότε θα πρέπει να το ξανακάνεις μόλις ξανασυνδεθεί το επόμενο τμήμα π.χ. a2.
αφήνει την υπόνοια οτι η εκτελεση του εν λογω κομματιου προγράμματος αντιγραφει το υποψηφιο αρχειο σε ολες τις ομάδες. Τουλάχιστον,  ετσι το κατάλαβα εγώ
Για το άλλο που έγραψα
Παράθεσηγ)δοκιμασα και το παρακάτω
Παράθεση

      for f in /home/*/Επιφάνεια\ εργασίας; do
        if [ ! -e "$f/Υλικό μαθήματος" ]; then
            sudo ln -s "$HOME/Δημόσια" "$f/Υλικό μαθήματος"
        fi
    done

αλλα ο φακελος υλικο δημιουργηθηκε μονο στην επιφάνεια εργασιας του server και σε κανεναν χρηστη Τι κανω λάθος;
διαπιστωσα μετα απο ενημερωση/συμπιεση του εικονικού δισκου για αλλο λόγο , οτι τότε εμφανίστηκε ο φάκελος στους πελάτες.
Επρεπε το παραπάνω κομμάτι προγράμματος να συνοδευτεί και με ενημερωση/συμπιεση του εικονικού δισκου;

apapakL

Παράθεση από: exanemou στις 07 Φεβ 2012, 12:58:44 ΜΜ
Για το άλλο που έγραψα διαπιστωσα μετα απο ενημερωση/συμπιεση του εικονικού δισκου για αλλο λόγο , οτι τότε εμφανίστηκε ο φάκελος στους πελάτες.
Επρεπε το παραπάνω κομμάτι προγράμματος να συνοδευτεί και με ενημερωση/συμπιεση του εικονικού δισκου;

Πιστεύω οτι χρειάζεται (και σε αυτή τη περίπτωση) ένα refresh στην επιφάνεια εργασίας των χρηστών που ήταν συνδεδεμένοι κατά την εκτέλεση της εντολής.

alkisg

Η εντολή cp μέσα από τα sch-scripts αντιγράφει το αρχείο μόνο στους επιλεγμένους μαθητές. Άρα αν εκείνη στιγμή κάνει μάθημα το a1, θα αντιγραφεί σε όλους τους μαθητές του a1, και μόνο σε αυτούς.

Ο εικονικός δίσκος δεν έχει καμία σχέση. Ένα F5 στην επιφάνεια εργασίας μπορεί να χρειάζεται για ανανέωση σε όλες τις περιπτώσεις.

denispyr

Άλκη είχες παλιά φτιάξει ένα skript;aki group-exec.
Παράθεση από: alkisg στις 14 Δεκ 2011, 02:27:39 ΜΜ
Δημήτρη ανεβάζω ένα script ονόματι group-exec το οποίο είναι πιο γενικής χρήσης και θα πρέπει να υπερκαλύπτει τις ανάγκες σου. .....

Έχει αντικατασταθεί με κάτι άλλο;

Αν όχι μάλλον κάτι άλλαξε τα τελευταία 8 χρόνια  :o γιατί αν το εκτελέσω για το a1

Κώδικας: bash
group-exec a1 cp '/home/denispyr/Επιφάνεια εργασίας/Άσκηση 1.pdf' 'Επιφάνεια εργασίας/'


μου  βγάζει για για κάθε μέλος

Κώδικας: bash
Executing: sudo -i -u a1-9 exec  -- 'cp' '/home/denispyr/Επιφάνεια εργασίας/Άσκηση 1.pdf' 'Επιφάνεια εργασίας/'
-bash: exec  -- 'cp' '/home/denispyr/Επιφάνεια εργασίας/Άσκηση 1.pdf' 'Επιφάνεια εργασίας/': Δεν υπάρχει τέτοιο αρχείο ή κατάλογος
Διονύσης

alkisg

Έχω γράψει διάφορα σχετικά scripts κατά καιρούς εδώ στο φόρουμ αλλά ακόμα δεν αξίωσα να το κάνω να γίνεται με δεξί κλικ από τα sch-scripts.

Αμυδρά θυμάμαι ένα bug με τη sudo και το quoting των παραμέτρων, πάντως τώρα στην 18.04 έτσι όπως ήταν δεν έπαιζε. Το έστρωσα λίγο, κάνε μια ακόμα δοκιμή.

denispyr

Για τους απλούς λογαρισαμούς (όχι sudoers υποθέτω) βγάζει
Κώδικας: bash
Executing: sudo -i -u a2-8 -- cp /home/denispyr/Επιφάνεια εργασίας/Άσκηση 1.pdf Επιφάνεια εργασίας/
cp: αδύνατη η εκτέλεση της stat στο αρχείο '/home/denispyr/Επιφάνεια εργασίας/Άσκηση 1.pdf': Άρνηση πρόσβασης

Αν προσπαθήσω με αρχείο που έχει read permissions τότε παίζει (άρα έχω workaround αν χρειαστεί).

Επίσης αν δώσω a1,a2 δίνει
Κώδικας: bash
No users found in these groups: a1,a2
Διονύσης

alkisg

Το "no users found" το διόρθωσα, ξανακάνε λήψη. Εντωμεταξύ ξέθαψες πολύ παλιό script και μου φαίνεται πολύ περίεργο να το "συντηρώ" εκτός git!

Για την άρνηση πρόσβασης, πρέπει πριν τρέξεις την εντολή να κάνεις `sudo chmod 755 ~` για να δώσεις δικαιώματα ανάγνωσης στο /home/denispyr, ή να βάλεις το αρχείο κάπου αλλού που να έχουν δικαίωμα να το διαβάσουν οι χρήστες.

Τα sch-scripts δίνουν δικαίωμα ανάγνωσης μόνο στο group teachers στους αρχικούς καταλόγους των καθηγητών.

denispyr

Ευχαριστώ για την υποστήριξη :)
Έχεις σε κάποιο git μαζεμένα σκριπτάκια χρήσιμα; Κοίταξα στο https://gitlab.com/sch-scripts/sch-scripts αλλά δεν είδα κάτι.
Διονύσης