Considérons le code suivant (dans une fonction de mon fichier .bash_aliases) :
action="ls -B -I \"*.c\""
echo $action
$action
Quand j’exécute la fonction j'ai bien l'echo qui annonce la commande qui suit, puis un résultat similaire à
ls -B
donc en ignorant les arguments suivants. Puis, lorsque je copie-colle le résultat de l'echo (donc normalement exactement ce qui a été exécuté juste après) dans mon terminal et que j'exécute cette commande, j'obtiens bien le résultat attendu.
Je ne comprends pas d'où vient cette différence de comportement.
En vous remerciant pour votre aide,
numero_744
PS : la fonction complète, dont le rôle est d'afficher le contenu d'un dossier en séparant les fichiers par extension pour certaines extensions, puis d'afficher les autres fichiers et dossiers :
ll() {
extensions=".h .c .cpp .o"
action="ls -B"
for e in $extensions
do
ls *$e 2> /dev/null
action="$action -I \"*$e\""
done
echo $action
$action # C'est ici que je n'ai pas le résultat attendu.
}
Merci pour cette réponse. Je comprends mieux ce qu'il se passe.
Sans utiliser ls, puis-je conserver la coloration et un équivalent de l'option -B ? Mon but étant de faire exactement comme ls, mais en regroupant par extensions (un drapeau permet de trier par extensions mais ne fait pas de regroupements).
J'ai essayé les commandes que vous indiquez, la seconde me demande de la compléter sur la ligne suivante. Je pense que c'est à cause du ' ouvrant sans fermant.
EDIT : Une idée qui me semble bourrine mais qui marche :
ll() {
extensions=".h .c .cpp .o"
action="ls --color=auto -B"
for e in $extensions; do
ls *$e 2> /dev/null
for f in *$e; do
action="$action -I $f"
done
done
$action
}
j'ai corrigé mon message : il y a des trucs qui étaient passés à la trappe; je ne sais pas pourquoi. peu importe.
la coloration syntaxique est propre à ls.
ton code indique que tu veux afficher d'abord les fichiers ayant une extension stockée dans extensions puis afficher les autres
declare -a extensions=( h c cpp o )
for ext in "${extensions[@]}"
do
printf '%s\n' ./*."$ext"
done
exts=$(IFS='|'; echo "${extensions[*]}")
printf '%s\n' ./!(*.@(${exts}|~))
pour la coloration, ça se bricole pour les fichiers dont on connait l'extension; avec un tableau associatif prenant en indices les extensions, et en valeurs le format souhaité.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
ça ne fonctionnera pas comme le souhaite numero_744, entre autre parce que ça va descendre dans les répertoires indiqués par le développement de chemins.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique