BASH: chemins fichiers

Tout ce qui concerne la programmation.
Répondre
Avatar du membre
piratebab
Site Admin
Site Admin
Messages : 3655
Enregistré le : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : Hors ligne

31 mars 2021, 16:40

Bonjour,
je cale sur un truc probablement tout simple.
J'ai fait un script ecasond pour lancer l'écoute de plusieurs fichiers wav;

Code : Tout sélectionner

#!/bin/bash
ecasound \
     -a:1 -i bass.wav \
     -a:2 -i drums.wav \
     -a:3 -i other.wav -epp:100\
     -a:4 -i vocals.wav -epp:0\
     -a:all -o alsa
Si je le lance depuis le mê répertoite, tout va bien.
Si je le lance depuis un autre répertoire en utilisant un chemin absolu, il ne trouve pas les fichiers.wav.
Est ce qu'il faut que je mette le chemin absolu de chaque fichier .wav, ou bien il y a un façon d'indiquer qu'ils sont dans le même rep que dans le script?
Avatar du membre
vv222
Modérateur
Modérateur
Messages : 442
Enregistré le : 18 avr. 2016, 20:14
Localisation : Bretagne
Contact :
Status : Hors ligne

31 mars 2021, 22:54

Il y a plusieurs options, comme souvent :icon_e_wink:

Se placer automatiquement dans le répertoire du script :

Code : Tout sélectionner

#!/bin/bash

# Récupération du chemin du répertoire contenant le script
SCRIPT_DIR=$(dirname "$0")

# Positionnement du répertoire de travail dans celui contenant le script
cd "$SCRIPT_DIR"

ecasound \
     -a:1 -i bass.wav \
     -a:2 -i drums.wav \
     -a:3 -i other.wav -epp:100\
     -a:4 -i vocals.wav -epp:0\
     -a:all -o alsa
Donner le chemin complet des fichiers :

Code : Tout sélectionner

#!/bin/bash

# Récupération du chemin du répertoire contenant le script
SCRIPT_DIR=$(dirname "$0")

ecasound \
     -a:1 -i "${SCRIPT_DIR}/bass.wav" \
     -a:2 -i "${SCRIPT_DIR}/drums.wav" \
     -a:3 -i "${SCRIPT_DIR}/other.wav" -epp:100\
     -a:4 -i "${SCRIPT_DIR}/vocals.wav" -epp:0\
     -a:all -o alsa
Avatar du membre
piratebab
Site Admin
Site Admin
Messages : 3655
Enregistré le : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : Hors ligne

01 avr. 2021, 20:06

Merci, ça m'a permit d'apprendre un nouveau truc!
Avatar du membre
PengouinPdt
Contributeur
Contributeur
Messages : 1343
Enregistré le : 23 avr. 2016, 23:37
Localisation : 47/FR
Diaspora* : https://framasphere.org/u/hucste
Contact :
Status : Hors ligne

02 avr. 2021, 12:43

Je valide le propos de @lol, à un détail près :

SCRIPT_DIR="$(dirname "$(readlink -f -- "$0")")"
PengouinPdt { le seul, le vrai } ~ " Libre as a Pengouin "
- DIY - Debian Sid | Devuan Ceres
----
Ne réponds pas aux PM d'assistance
Avatar du membre
vv222
Modérateur
Modérateur
Messages : 442
Enregistré le : 18 avr. 2016, 20:14
Localisation : Bretagne
Contact :
Status : Hors ligne

02 avr. 2021, 17:07

Je m’appelle vv222, pas lol :003:

Pour info, la définition de variable de cette manière est une situation un peu spécifique.
Ces deux formes sont strictement équivalentes, y compris si commande retourne une valeur avec des espaces :

Code : Tout sélectionner

VARIABLE="$(commande)"
VARIABLE=$(commande)
Avatar du membre
lol
Site Admin
Site Admin
Messages : 3375
Enregistré le : 04 avr. 2016, 12:11
Localisation : Madagascar
Contact :
Status : Hors ligne

02 avr. 2021, 18:43

vv222 a écrit : 02 avr. 2021, 17:07 Je m’appelle vv222, pas lol :003:

Menteur! :rofl:
Debian stable. XFCE.
C'est curieux chez les marins ce besoin de faire des phrases (Les tontons flingueurs).
Répondre