Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

271
Visualizações
Script Bash que cambia un archivo JavaScript basado en la entrada del usuario

Quiero crear un comando de shell que ejecute comandos bash pero que también mute una matriz en un archivo Javascript. Por ejemplo, en el archivo groups.js :

 module.exports = { groups: [ "a", "b", "c" ] }

Quiero poder ejecutar un comando de shell que espere la entrada del usuario, por ejemplo, + / - , y luego agregará/eliminará grupos a esa matriz de grupos en el archivo groups.js y también ejecutará echo "New group added successfully" al final. es posible?

Ejemplo de ejecución de código:

 ./command.sh What would you like to do? (+ for add, - for remove): + What group do you want to add: d New groups: groups: [ "a", "b", "c", "d" ] Successfully added "d" to groups.js!
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Como se menciona en los comentarios, puede ser mucho más fácil si las personas pueden editar el archivo groups.js directamente; sin embargo, si se debe usar un script, este script bash puede ser un comienzo.

 $ cat command.sh #!/usr/bin/env bash file=groups.js read -rp "What would you like to do? (+ for add, - for remove): " add_or_remove_group if [[ "$add_or_remove_group" == "+" ]]; then cat "$file" read -rp "What group do you want to add: " add_group clear sed -i "s/\"[az]\"$/&,\n \"$add_group\"/" "$file" cat "$file" echo "Successfully added \"$add_group\" to groups.js" else cat "$file" read -rp "What group do you want to remove: " remove_group clear tac "$file"| sed "/\[\|{\|}/ ! {/$remove_group/d}" | tac | sed '/,/{N;N;/}/{s/,//}}' | tee "$file" echo "Successfully removed \"$remove_group\" to groups.js" fi
 $ ./command.sh What would you like to do? (+ for add, - for remove): + module.exports = { groups: [ "a", "b", "c" ] } What group do you want to add: d module.exports = { groups: [ "a", "b", "c", "d" ] } Successfully added "d" to groups.js
 $ ./command.sh What would you like to do? (+ for add, - for remove): - module.exports = { groups: [ "a", "b", "c", "d" ] } What group do you want to remove: a module.exports = { groups: [ "b", "c", "d" ] } Successfully removed "a" to groups.js
about 4 years ago · Juan Pablo Isaza Relatório

0

#!/usr/bin/bash Add_Group() { eval "$(echo "sed 'H;\$!d;x;/module.exports[^{]*{/,/^}/ s/\n/@@##/g;s/^[^:]*:^[\[]*\[//g;s/\(groups[^\[]*\[\)\([^\\\"]*\)\(.*\\\"\)\([^\]]*\)/\1\2\3,\2\\\"$group\\\"\4/g;s/\(^.*\\\"\)\(.*\)/\n\1\n\2/;h;s/.*\n//;s/^,//g;G;s/\(.*\n\)\(.*\n\)\(.*\)/\2\1/;s/\n//g;s/@@##/\n/g' $File -i")" } Remove_Group() { eval "$(echo "sed '/\\\"$group\\\"/d;H;\$!d;x;s/\n/@@##/g;s/\(^.*\\\"\)\(.*\)/\n\1\n\2/;h;s/.*\n//;s/^,//g;G;s/\(.*\n\)\(.*\n\)\(.*\)/\2\1/;s/\n//g;s/@@##/\n/g' $File -i")" } File=groups.js if [[ "$#" -gt 0 ]] then if [[ "$1" == "--add" ]] then for group in "${@:2}"; do Add_Group done echo "New Groups:" cat $File elif [[ "$1" == "--remove" ]]; then for group in "${@:2}"; do Remove_Group done echo "New Groups:" cat $File fi else echo 'What would you like to do? (+ for add, - for remove):' read function if [[ "$function" == "+" ]]; then cat $File read -p "Enter group names separated by 'space' that you want to add : " input for group in ${input[@]} do Add_Group done echo "New Groups:" cat $File elif [[ "$function" == "-" ]]; then cat $File read -p "Enter group names separated by 'space' that you want to remove : " input for group in ${input[@]} do Remove_Group done echo "New Groups:" cat $File fi fi

Este script se puede utilizar:

Interactivamente: ./Script.sh

No interactivo:
./Script.sh --añadir grupo1 grupo2 grupo3 ..
./Script.sh --remove grupo1 grupo2 grupo3...

Nota: La complejidad del comando sed utilizado es retener la estructura y los espacios de sangría en el archivo sin restricciones en la expresión regular como en la otra respuesta. Por lo tanto, si groups.js contiene textos adicionales que no sean la plantilla que se muestra, funcionará

Breve explicación de los comandos sed:
Añadir grupo
Carga todo el archivo en el búfer --> Para el rango /module.exports[^{]*{/,/^}/ ---> Reemplace \n con @### para restaurar la estructura por fin ---> Agrega una coma al último grupo existente ---> Agrega un nuevo grupo ---> Reemplaza el @@## de nuevo a \n

Eliminar_grupo
--->Elimine la línea que contiene "grupo" ---> En caso de que el grupo eliminado sea el último existente, luego se elimina la coma en el último grupo después de la edición restaurando la estructura original

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda