Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

207
Vistas
¿Qué shell usa std::system?

TL;RD; Supongo que el shell que usa std::system es sh . Pero no estoy seguro.

Traté de imprimir el shell usando este código: std::system("echo $SHELL") , y el resultado fue /bin/bash . Fue raro para mí. Entonces, quería ver, ¿qué sucede si hago eso en sh ? Y, la misma salida: /bin/bash . Además, si uso un comando como SHELL="/usr/bin/something" para establecer la variable SHELL en otra cadena, imprimirá la nueva cadena que configuré ( /usr/bin/something ), y parece que no es una buena manera de ver qué shell está usando. Luego, traté de verificarlo usando el comando ps , y el resultado fue: bash , a.out , ps . Fue raro ver a bash en esta lista. Entonces, creé un shell personalizado y cambié el shell en gnome-terminal:

 #include <iostream> int main() { std::string input; while (true) { std::string command; std::getline(std::cin, command); std::system(command.c_str()); } }

Ahora, es más fácil de probar, y creo que los resultados son mejores.

Luego, traté de probar el comando ps nuevamente, pero en el shell personalizado, y los resultados fueron: test_shell , ps .

Fue raro de nuevo. ¿Cómo el caparazón no es sh , ni bash ? Y, la prueba final que hice fue: echo $0 . Y, los resultados fueron sh , tanto en el shell personalizado como en el programa normal.

Editar

Parece que /bin/sh está vinculado a /bin/bash (la salida del comando ll /bin/sh es /bin/sh -> bash ), y en realidad, parece que la única diferencia entre sh y bash es el nombre de archivo, y el el contenido de los archivos es el mismo. También verifiqué la diferencia entre estos archivos con el comando diff :

 $ xxd /bin/sh > sh $ xxd /bin/bash > bash $ diff sh bash

(+ Sí, $SHELL no significa el shell en ejecución (no lo sabía cuando estaba probando, y solo quería ver qué sucede))

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Según cppreference.com , std::system

llama al procesador de comandos del entorno host (por ejemplo /bin/sh , cmd.exe , command.com )

Esto significa que el shell utilizado dependerá del sistema operativo.

En cualquier sistema operativo POSIX (incluido Linux), el shell utilizado por std::system es /bin/sh . (Aunque, como señala el OP, /bin/sh podría ser un enlace simbólico a otro shell).

En cuanto a la variable de entorno SHELL , como se ha señalado en los comentarios, esta variable de entorno no se puede utilizar para identificar de forma fiable el programa de shell en ejecución. SHELL es definido por POSIX para

representar un nombre de ruta del intérprete de lenguaje de comandos preferido del usuario

( fuente )

over 4 years ago · Santiago Trujillo Denunciar

0

Las fuentes de GNU ( https://github.com/lattera/glibc/blob/master/sysdeps/posix/system.c ) dicen

 /bin/sh

Entonces, lo que sea que /bin/sh esté vinculado es el shell invocado por std::system() en Linux.

(Esto es correcto, ya que se espera que /bin/sh esté vinculado a un shell cuerdo capaz de hacer cosas con el sistema).

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda