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,337
    Mencionado
    20 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    115
    Agradecer Thanks Received 
    201
    Thanked in
    Agradecido 128 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,749
    Mencionado
    226 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    2,240
    Agradecer Thanks Received 
    1,902
    Thanked in
    Agradecido 1,185 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,337
    Mencionado
    20 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    115
    Agradecer Thanks Received 
    201
    Thanked in
    Agradecido 128 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
    Ubicación
    Malaga
    Mensajes
    7,561
    Mencionado
    47 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,668
    Agradecer Thanks Received 
    1,922
    Thanked in
    Agradecido 1,289 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.


    It is an undisputed truth that the Atari ST gets the best out of coders. No dedicated hardware, just the CPU and a frame buffer! Some call it Spartan, others name it Power Without The Price, and a select few say `challenge accepted'! --- by spkr from smfx

  5. #5

    Fecha de ingreso
    Apr 2018
    Mensajes
    183
    Mencionado
    0 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    2
    Agradecer Thanks Received 
    100
    Thanked in
    Agradecido 45 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,337
    Mencionado
    20 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    115
    Agradecer Thanks Received 
    201
    Thanked in
    Agradecido 128 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 23:25

  7. #7

    Fecha de ingreso
    Dec 2011
    Mensajes
    1,337
    Mencionado
    20 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    115
    Agradecer Thanks Received 
    201
    Thanked in
    Agradecido 128 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 05:54

Permisos de publicación

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