Mecanismo para devolver una cadena del progtwig C main ()

Sé que el progtwig C generalmente termina con la devolución, donde devolvemos el estado del progtwig. Sin embargo, quiero devolver una cadena. La razón es que llamaré el ejecutable C desde un script de shell e imprimiré la cadena devuelta. ¿Hay algún mecanismo para lo mismo?

No existe tal mecanismo; Se espera que el código de retorno sea un byte. Si desea generar una cadena desde su progtwig, use algo como printf() y la sustitución de comandos en el script de shell para capturarlo.

No se puede.

Lo mejor que podría hacer es escribir la cadena en algún lugar (en la salida estándar, error estándar o algún archivo); entonces el shellscript obtendrá su cadena desde allí.

La salida estándar (por lo tanto, usar solo printf ) es probablemente la mejor solución, ya que será muy fácil desde su progtwig C imprimir la cadena y muy fácil para que el shellscript obtenga esa información:

Desde shell script:

 STRING="$( ./your_program argv1 argv2 )" 

No hay forma de devolver una cadena desde main() . Tal vez el progtwig en sí debería imprimir la cadena?

Simplemente imprima la cadena que desea volver a la salida estándar con printf . Luego, en tu guión, haz algo como esto:

 SOMESTRING="`./yourprogram`" 

Los backticks capturarán la salida del progtwig, que será la cadena que imprimió.

No puedes, pero tampoco necesitas. Devuelve un código de estadísticas de main, pero siempre puede redirigir la salida y capturarla en su script de shell.

No puedes, solo puedes devolver un entero.

Recuerda que C fue desarrollado junto a Unix. Los progtwigs Unix devuelven un valor entero que está pensado como un código de estado. Si un progtwig devolviera cadenas (s), las escribiría en stdout, y luego el usuario (o un script) las canalizaría en algo útil.

MS DOS también tenía valores de estado de solo números.

Tienes que imprimir la cadena para stdout y usar la sustitución del comando del shell para leer el resultado:

 "`command`" 

o:

 "$(command)" 

De cualquier manera, debe usar las comillas dobles adjuntas como se indicó anteriormente. Tenga en cuenta que este método tiene un problema potencialmente grave, ya que elimina todas las nuevas líneas de entrenamiento de la salida del comando. Si necesita conservar el resultado exacto, intente:

 output="$(command ; echo x)" output="${output%x}" 

Como OP mencionó que esto es para una contraseña, otro consejo: una vez que haya leído una contraseña en una variable de shell, nunca la pase a la línea de comandos a otros progtwigs. Las líneas de comando suelen ser legibles en todo el mundo. En lugar de algo como

 wget "http://$user:$pass@host/foo" 

intenta algo como

 wget -i - << EOF http://$user:$pass@host/foo EOF 

Aquí, los archivos como en este ejemplo son útiles con una serie de progtwigs que necesitan tomar contraseñas de scripts.