User Tag List

Resultados 1 al 7 de 7

Tema: Como reescribir la variable PS1 de tu prompt en bash script?

  1. #1

    Fecha de ingreso
    Dec 2011
    Mensajes
    1,318
    Mencionado
    19 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    112
    Agradecer Thanks Received 
    193
    Thanked in
    Agradecido 120 veces en [ARG:2 UNDEFINED] posts

    Como reescribir la variable PS1 de tu prompt en bash script?

    Buenas Nos ha tocado un "profe" que no explica teoria ni nada ni te da pdf y te suelta que te busques la vida con las prácticas que pone que la verdad no es ni profe resulta que es su primer año y han metido a uno de ingenieria informática a hacer de profe y nos trata como tal tiene que estar en el bashrc y que no se duplique el PS1=""..

    ¿Cómo puedo "Decir" que reescriba lo que metas por read al PS1 existente del archivo .bashrc? da por hecho que sabemos bash y casi toda la clase va perdida

    ¿Alguna ayuda? mucha información no hay por internet al respecto en bash..

  2. #2

    Fecha de ingreso
    Feb 2004
    Ubicación
    Madrid
    Mensajes
    22,418
    Mencionado
    199 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    2,019
    Agradecer Thanks Received 
    1,590
    Thanked in
    Agradecido 1,033 veces en [ARG:2 UNDEFINED] posts
    no entiendo exactamente tu pregunta, pero para escribir el valor de una variable en bash es con el comando echo. Si tienes una variable PS1, sería echo $PS1; y con eso debería mostrar el valor.

  3. #3

    Fecha de ingreso
    Dec 2011
    Mensajes
    1,318
    Mencionado
    19 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    112
    Agradecer Thanks Received 
    193
    Thanked in
    Agradecido 120 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por ^MiSaTo^ Ver mensaje
    no entiendo exactamente tu pregunta, pero para escribir el valor de una variable en bash es con el comando echo. Si tienes una variable PS1, sería echo $PS1; y con eso debería mostrar el valor.
    perdona si no se me ha entendido Quiere que guardes permanente desde un menu que ya lo tengo creado con un case y sobrescribas la variable PS1 del .bashrc con echo solo muestra por pantalla hasta donde yo se que luego se borra al salirte de la terminal.

  4. #4

    Fecha de ingreso
    Sep 2006
    Mensajes
    4,560
    Mencionado
    21 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    591
    Agradecer Thanks Received 
    517
    Thanked in
    Agradecido 380 veces en [ARG:2 UNDEFINED] posts
    PS1="lo que sea"

    ¿no?

    Ten en cuenta que hasta que no cierres la terminal y abras una nueva no veras los cambios.
    No es lo mismo tener diez años de experiencia, que tener un año de experiencia diez veces.

  5. #5

    Fecha de ingreso
    Apr 2018
    Mensajes
    191
    Mencionado
    0 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    2
    Agradecer Thanks Received 
    106
    Thanked in
    Agradecido 48 veces en [ARG:2 UNDEFINED] posts
    Puedes usar sed
    creo que seria algo como esto (estoy un poco oxidado con los metas)
    sed 's/PS1=\".*\"/PS1=\"otro valor\"/' .bashrc

    Si quieres que cambie lo que pones en ps1 solo tendrías que poner el valor en una variable y meterlo en la cadena.

  6. #6

    Fecha de ingreso
    Dec 2011
    Mensajes
    1,318
    Mencionado
    19 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    112
    Agradecer Thanks Received 
    193
    Thanked in
    Agradecido 120 veces en [ARG:2 UNDEFINED] posts
    Sí eso es pero el problema no quiere que se duplique al hacer echo PS1="Lo que sea" a >> .bashrc porque tengo 3 o 4 funciones en una funcion le cambio el hostname , en otra le meto color y cosillas así pero claro si lo hago asi me escribe cada funcion en una linea PS1 diferente .

    He leído por ahi que con sed permite reescribir algo existente pero ni idea como va xD.

    edit @zhorro vale eso creo que se asemeja a lo que quiere el profe pues al lio gracias es que tiene tela que en FP superior de por sentado que se sepa hacer scripts de este tipo sin explicar nada xD.
    Última edición por Carlos24; 17/12/2018 a las 22:25

  7. #7

    Fecha de ingreso
    Dec 2011
    Mensajes
    1,318
    Mencionado
    19 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    112
    Agradecer Thanks Received 
    193
    Thanked in
    Agradecido 120 veces en [ARG:2 UNDEFINED] posts
    Conseguido dejo aqui un boceto para si algún día alguien necesite un menú con functions

    P.D al final utilice sed -i -e '/PS1=/d' ~/.bashrc el /d sirve para eliminar cualquier PS1= vigente repetido y el ~ para remarcar siempre al directorio home del usuario y salvo que salga del while que le digo para finalizar el script y en caso de tecla erronea mostrar un error no válido.

    el exec bash es para hacerme a mi más comodo ver reflejado los cambios sin cerrar la terminal pues no es más que llamar a la terminal bash de nuevo


    Código:
    #!/bin/bash
    
    function menu {
    echo "[1] cambiar prompt color"
    echo ""
    echo "[2] cambiar Hostname"
    echo ""
    echo "[3] que se vea el PWD"
    echo ""
    echo "[4] que se vea la hora"
    echo ""
    echo "[x] Exit"
    echo ""
    
    read -p "Opciones > " option (esto es para que salga en pantalla de bajo del menu Opciones o lo que quieras tener escrito en pantalla > y espera a que pulses una opción )
    
    }
    
    function color {
        clear
        cd
       
    }
    
    function hostname {
         clear
         cd
    #prompt actual = $hostn
         hostn=$PS1
         
    #Decir el prompt a la variable hostn
         echo "El actual prompt es is $hostn"
    
    #Preguntar por el nuevo hostname host a la variable $newhost
         echo "Introduce el nuevo hostname: "
         read newhost
    
    #Lectura y escritura para el nuevo prompt hostname
         echo "tu nuevo hostname es $newhost"
         sed -i -e '/PS1=/d' ~/.bashrc
         echo PS1=[$(whoami)\@$newhost] >> ~/.bashrc
         exec bash
    }
    
    function pwd {
         clear
         cd
    
    }
    
    function hora {
         clear
         cd
    
         
    }
    
    function terminate {
         exit
    }
    
    end_script=0
    while [ "${end_script}" != 1 ];do
        menu
        case ${option} in
        
        1)
            color
        ;;
    
        2)
            hostname
        ;;
    
        3)
            pwd
        ;;
    
        3)
            hora
        ;;
    
        x)
    
            terminate
        ;;
    
        *)
            clear
            echo "Error tecla no valida!"
            exec bash
        ;;
        esac
    done
    Última edición por Carlos24; 18/12/2018 a las 04:54

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •