J'écris un script qui boucle dans les files récents dans un dossier et exécute une command …
#!/bin/bash cd /home/Downloads recent_files = ($(ls -t | head -20)) for file in "${recent_files[@]}" do ./cmd $file done
J'obtiens l'erreur de syntaxe suivante:
line 3: syntax error near unexpected token `(' line 3: `recent_files = ($(\ls -t | head -20))'
Le schéma d'affectation des variables Bash est var=value
c'est-à-dire que les espaces supplémentaires ne sont pas autorisés.
Les supprimer affectera correctement ls -t | head -20
ls -t | head -20
sortie en tant que tableau.
Donc votre script devrait être:
#!/bin/bash cd /home/Downloads recent_files=($(ls -t | head -20)) for file in "${recent_files[@]}" do ./cmd $file done
Vous n'avez pas besoin de stocker la sortie dans une variable du tout:
cd /home/Downloads command ls -t | head -20 | while read -r file; do ./cmd "$file" done
ou même
command ls -t | head -20 | xargs -L 1 ./cmd
Une façon plus sûre de travailler c'est avec stat
. Il ne vous protège toujours pas des noms de files avec des returns à la ligne, mais
stat -c "%Y %n" * | sort -rn | head -20 | cut -d" " -f2- | xargs -L 1 ./cmd
Pour être infaillible, find
– probablement besoin d'outils GNU pour la gestion des null-byte
find . "${find_options[@]}" -printf '%T@ %p\0' | sort -zrn | xargs -0 -L 1 sh -c './cmd "$(echo "$0" | sed "1s/^[0-9.]\\+ //")"'
le tableau find_options
peut être utilisé comme espace réservé pour append des directives de filtrage, telles que
find_options=( -type f ) find_options+=( -maxdepth 1 ) find_options+=( -name '*.txt' )
etc
Vous devez supprimer les espaces autour du signe égal.
recent_files=($(ls -t | head -20))
Alors ça devrait marcher.
Je pense qu'il y a une réponse plus simple …
#! / bin / bash cd / home / Téléchargements pour le file dans $ (ls -t | head -20) faire ./cmd $ file terminé
Le message d'erreur dit tout. Cependant, pour aider à ces problèmes à l'avenir, vous pouvez adopter certaines pratiques:
recent_files = ($ (ls -t | head -20))
et courir
bash -n myScript.sh
Cela permettra de vérifier les erreurs dans le script.
Commenter un bloc de lignes comme ceci:
: << 'EOF' lines of code EOF
et courir
bash -n myScript.sh
En utilisant cette méthodologie, vous pourrez zoomer sur la ligne erronée de votre script.
Pour revenir à votre problème spécifique, beaucoup ont déjà répondu à ce qui en est la cause – les espaces autour du signe =
.