Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

210
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!