Archief - shell script probleem

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

RpR

Legacy Member
Ik heb onderstaand shell script gecopieerd van de rtorrent site.
Bij het runnen van sudo /etc/init.d/rtorrent start
krijg ik altijd

39: Syntax error: "(" unexpected
Lijn 39: config=("/home/${user}/.rtorrent.rc")

snap niet dat ik dus de enige persoon ben die dit tegenkomt dus het script moet volgens mij kloppen. Het script is uitvoerbaar dus daar kan het niet aan liggen.


Code:
# !/bin/sh
#############
###<Notes>###
#############
# This script depends on screen.
# For the stop function to work, you must set an
# explicit session directory using absolute paths in your rtorrent.rc.
# If you typically just start rtorrent with just "rtorrent" on the
# command line, all you need to change is the "user" option.
# Attach to the screen session as your user with 
# "screen -dr rtorrent". Change "rtorrent" with srnname option.
##############
###</Notes>###
##############


#######################
##Start Configuration##
#######################
# You can specify your configuration in a different file 
# (so that it is saved with upgrades, saved in your home directory,
# or whateve reason you want to)
# by commenting out/deleting the configuration lines and placing them
# in a text file (say /home/user/.rtorrent.init.conf) exactly as you would
# have written them here (you can leave the comments if you desire
# and then uncommenting the following line correcting the path/filename 
# for the one you used. note the space after the ".".
# . /etc/rtorrent.init.conf


#Do not put a space on either side of the equal signs e.g.
# user = user 
# will not work
# system user to run as (can only use one)
user="rtorrent"

# the full path to the filename where you store your rtorrent configuration
# must keep parentheses around the entire statement, quotations around each config file
config=("/home/${user}/.rtorrent.rc")
# Examples:
# config=("/home/user/.rtorrent.rc")
# config=("/home/user/.rtorrent.rc" "/mnt/some/drive/.rtorrent2.rc")
# config=("/home/user/.rtorrent.rc"
# "/mnt/some/drive/.rtorrent2.rc"
# "/mnt/another/drive/.rtorrent3.rc")

# set of options to run with each instance, separated by a new line
# must keep parentheses around the entire statement
#if no special options, specify with: ""
options=("")
# Examples:
# starts one instance, sourcing both .rtorrent.rc and .rtorrent2.rc
# options=("-o import=~/.rtorrent2.rc")
# starts two instances, ignoring .rtorrent.rc for both, and using
# .rtorrent2.rc for the first, and .rtorrent3.rc for the second
# we do not check for valid options
# options=("-n -o import=~/.rtorrent2.rc" "-n -o import=~/rtorrent3.rc")

# default directory for screen, needs to be an absolute path
base="/home/${user}"

# name of screen session
srnname="rtorrent"
#######################
###END CONFIGURATION###
#######################
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="rtorrent"
NAME=rtorrent
DAEMON=/usr/bin/$NAME
SCRIPTNAME=/etc/init.d/$NAME

# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0

checkcnfg() {
  for (( i=0 ; i < ${#config[@]} ;  i++ )) ; do
	if ! [ -r "${config[i]}" ] ; then
		echo "cannot find readable config ${config[i]}. check that it is there and permissions are appropriate">&2
		exit 3
	fi
	session=$(cat "${config[i]}" | grep "^[[:space:]]*session" | sed "s/^[[:space:]]*session[[:space:]]*=[[:space:]]*//")
	if ! [ -d "${session}" ] ; then
		echo "cannot find readable session directory ${session} from config ${config[i]}. check permissions">&2
		exit 3
	fi
  done
}

d_start() {
  [ -d "${base}" ] && cd "${base}"
  stty stop undef && stty start undef
  su -c "screen -ls | grep "\.${srnname}[[:space:]]" > /dev/null" ${user} || su -c "screen -dm -S ${srnname}" ${user}
  for (( i=0 ; i < ${#options[@]} ; i++ )) ;  do
    sleep 3
    su -c "screen -S "${srnname}" -X screen rtorrent ${options[i]}" ${user}
  done
}

d_stop() {
  for (( i=0 ; i < ${#config[@]} ; i++ )) ; do
  	session=$(cat "${config[i]}" | grep "^[[:space:]]*session" | sed "s/^[[:space:]]*session[[:space:]]*=[[:space:]]*//")
	pid=$(cat ${session}/rtorrent.lock | awk -F: '{print($2)}' | sed "s/[^0-9]//g")
	# make sure the pid doesn't belong to another process
	# skip the pid otherwise
	if ps -A | grep ${pid}.*rtorrent > /dev/null ; then
		kill -s INT ${pid}
	fi
  done
}

checkcnfg

case "$1" in
  start)
	echo -n "Starting $DESC: $NAME"
	d_start
	echo "."
	;;
  stop)
	echo -n "Stopping $DESC: $NAME"
	d_stop
	echo "."
	;;
  restart|force-reload)
	echo -n "Restarting $DESC: $NAME"
	d_stop
	sleep 1
	d_start
	echo "."
	;;
  *)
	echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
	exit 1
	;;
esac

exit 0

RpR

Legacy Member
Opgelost:

Fout kwam doordat de default sh voor ubuntu is dash
Dash kan geen
"test=("a" "b")"
Na aanpassing
van
!#/bin/sh
naar
!#/bin/bash
werkt alles :)

RpR

Legacy Member
Toch nog een probleem

Als ik in het script de user op mijn gebruiker zet rpr dus dan werkt het.
Zet ik het op de rtorrent gebruiker die geen shell heeft dan werkt het niet.

RpR

Legacy Member
bij nader inzien moet de gebruiker wel shell rechten hebben want ze gaan via het su commando een screen aanmaken bij die gebruiker.

RpR

Legacy Member
Nu een vraag op mijn mythtv heeft de gebruiker mythtv ook een shell maar die doet geen autoaanvulling met tab. Welke shell is dit?

Ik heb al gezocht in de file /etc/shadow maar daar zijn de laatste velden leeg dus ik weet niet welke shell dat is. Iemand die kan helpen?

dJeez

Legacy Member
Gewoon echo $SHELL uitvoeren hé, dan zal je het snel weten in principe :p. En anders moet je /etc/passwd checken uiteraard.

RpR

Legacy Member
dJeez zei:
Gewoon echo $SHELL uitvoeren hé, dan zal je het snel weten in principe :p. En anders moet je /etc/passwd checken uiteraard.

Jep dus gevonden :)
Nu een kleine vraag nog

Normaal zou ik met screen -rd rtorrent dus de screen moeten kunnen overnemen. Als een andere gebruiker gaat dit niet en als rtorrent gebruiker krijg ik de fout:
Cannot open your terminal '/dev/pts/3' - please check.

dJeez

Legacy Member
De logs al eens gechecked op foutmeldingen? Het lijkt er nu wel op dat je via su bent ingelogd als die rtorrent gebruiker en dan screen hebt proberen op te starten (check de rechten op die terminal maar eens om de reden te weten waarom je dan niet kan connecteren :p).

Maar als ik het goed begrijp wil je die screen sessie ook delen met andere gebruikers? Zo ja, dan kan het volgende wel nuttig zijn : http://www.redhatmagazine.com/2007/09/27/a-guide-to-gnu-screen/
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan