Comment trouver si un répertoire est un assembly dans ShellScript

Je dois trouver si un emplacement est un répertoire et s’il s’agit d’un assembly dans ShellScript

J’ai essayé ceci:

new_dir="/home/fruits/apple" if [ -d "$new_dir" ] then if [ mountpoint -q "$new_dir" ] then echo "directory is mounted" else echo "directory is not mounted" fi fi 

Mais ça ne fonctionne pas. donne l’erreur comme

 test_dir.sh: line 13: [: -q: binary operator expected directory is not mounted 

Quelqu’un peut-il aider … J’ai besoin de ce travail …

La clé est en disant:

 if [ mountpoint -q "$new_dir" ] # WRONG 

Vous n’avez pas à utiliser test [ car mountpoint -q "$new_dir" renvoie déjà un booléen. C’est tout ce dont vous avez besoin:

 if mountpoint -q "$new_dir" 

De l’ man point :

Mountpoint vérifie si le répertoire est un sharepoint assembly.

Statut de sortie

Zéro si le répertoire est un sharepoint assembly, non nul sinon.

En fait, vous pouvez même dire:

 mountpoint -q "$new_dir" && echo "mounted" || echo "not mounted" 

Si vous voulez vraiment utiliser [ ] , vous devez exécuter la commande et prendre en compte le statut de sortie:

 if [ ! $(mountpoint -q "/home") ]; then echo "directory is mounted" else echo "directory is not mounted" fi 

Remarque: je nie le résultat avec [ ! expression ] [ ! expression ] .


Pourquoi obtenez-vous une erreur attendue de l’opérateur binary ?

Parce que vous écriviez une expression dans le test qui n’est pas prise en charge.

man test explique la syntaxe qu’il accepte:

 [ EXPRESSION ] [ ] [ OPTION 

Et il mentionne également qu’il existe avec le statut déterminé par EXPRESSION .

Lorsque vous dites sharepoint mountpoint dans [ , bash suppose qu’il gère une expression. Compte tenu de la liste des conditions possibles ( 6.4 Expressions conditionnelles Bash ), le fait que le premier élément ne soit pas un opérateur fait que bash veut voir un opérateur binary après lui, tel que = , =~ … Puisqu’il voit -q , il échoue et mentionne -q comme problème.

@fedorqui a raison

La construction conditionnelle:

 if [ mountpoint -q "$new_dir" ] 

est interprété comme “mountpoint” inside [...] .

Donc, -q est considéré comme l’opérateur et il n’y a pas un tel opérateur prenant deux arguments.