PDA

Visualizza la versione completa : Linux bash $0


floyd
15-03-2007, 13:14
ho bisogno di estrarre il path completo allo script in esecuzione
spiego
#! /bin/bash
MYPATH=$0
quando eseguo questo script MYPATH vale ./nome_dello_script
mi serve il percorso completo allo script

se questo non fosse possibile, mi serve un modo per creare un file nella stessa directory dello script in esecuzione
io devo eseguire uno script che crea un file nella stessa sua directory
se lo eseguo dalla dir tutto va bene
ma se lo eseguo (ad esempio) da / con questo comando /percorso_assoluto/script.sh lui crea il file in / :nonlodire

per i moderatori: la mia richiesta pu essere vista come programmazione, in fondo in una shell si programma a tutti gli effetti
se credete sia meglio la sezione programmazione, spostate pure il thread
grazie :zizi:

cacao74
15-03-2007, 14:18
Lancia lo script con il suo percorso assoluto e poi utilizza il comando "dirname" per recuperare la directory che contiene lo script stesso.

ciao

floyd
15-03-2007, 14:39
ho provato
dirname
dirname .
dirname nome_script
il primo d errore, gli altri scrivono "."
a ogni modo non posso lanciare lo script completo del suo path
devo trovare un modo per capire "dove sta lo script"

PinguinoGoloso
15-03-2007, 16:15
man pwd .

cacao74
16-03-2007, 01:00
Originariamente inviato da floyd
ho provato
dirname
dirname .
dirname nome_script
il primo d errore, gli altri scrivono "."
a ogni modo non posso lanciare lo script completo del suo path
devo trovare un modo per capire "dove sta lo script"

Prima cosa: man dirname
Seconda cosa:


[cacao74@tweety ~]$ cat /tmp/cacao.sh
#!/bin/bash
echo "Questo script si trova in `dirname $0`."
exit 0
[cacao74@tweety ~]$ /tmp/cacao.sh
Questo script si trova in /tmp.

floyd
16-03-2007, 10:20
il fatto che questo uno script che esegue un piccolo server
non posso obbligare i sistemisti a lanciarlo in un determinato modo
ad esempio se lo eseguo con
. /path_completo/script ma anche senza il path
dirname $0 ritorna "."
pwd non basta
credo di dover trovare una soluzione diversa, grazie lo stesso

billiejoex
16-03-2007, 13:45
Io non ho proprio capito il problema...

silviof
18-07-2010, 22:18
#!/bin/bash
me=$(echo `dirname $0`)
zenity --info --text $me
exit 0

cacao74
19-07-2010, 02:12
ti faccio un ulteriore esempio di quanto scritto prima, sempre utilizzando dirname:


#!/bin/bash
# pwd.sh
#
WORKDIR=$(dirname $0)
FILENAME=cacao.txt
echo "eseguo lo script da $PWD"
echo "cambio directory in $WORKDIR"
cd $WORKDIR
echo "mi trovo in: $PWD"
echo "e creo un file vuoto $FILENAME"
touch $FILENAME
ls -l $FILENAME
exit 0


qui, un esempio di esecuzione:


cacao74@slack64:~/src/scripts$ pwd
/home/cacao74/src/scripts
cacao74@slack64:~/src/scripts$ /tmp/pwd.sh
eseguo lo script da /home/cacao74/src/scripts
cambio directory in /tmp
mi trovo in: /tmp
e creo un file vuoto cacao.txt
-rw-r--r-- 1 cacao74 users 0 2010-07-19 01 cacao.txt
cacao74@slack64:~/src/scripts$ pwd
/home/cacao74/src/scripts
cacao74@slack64:~/src/scripts$ ls -l /tmp/cacao.txt
-rw-r--r-- 1 cacao74 users 0 2010-07-19 01:10 /tmp/cacao.txt

ps... sicuramente i tuoi sistemisti sono in grado di fare quanto sopra...

Loading