(24-02-2021, 22:44)jguardon escribió: Eso plantea el problema de que si distribuyes tu aplicación, no vas a saber qué shell tienen los diferentes usuarios. Entonces tu aplicación podría fallar si especificas un shell que no exista en esa máquina.
Se me ocurre que mediante alguna variable de entorno se puede averiguar y actuar en consecuencia, escogiendo entre varias opciones en el código.
cat /etc/shells
Cita:# /etc/shells: valid login shells
/bin/sh
/bin/bash
/bin/rbash
/bin/dash
/usr/bin/tmux
Public Sub Main()
Dim ashelldisponibles As String[]
Dim contenidoarchivo As String
Dim ruta As String = "/etc/shells"
Dim orden As String = " which mam{e,e32,e64} "
Dim ashelladecuados As String[]
contenidoarchivo = File.Load(ruta)
'Convertimos cada línea de contenidoarchivo a un array con split, delimtando con final de línea, un caracter de escape que no existe y eliminamos los espacios vacíos
'Solo nos interesa obtener los elemementos del segundo indice hasta el último indice del array. Usamos la orden Extract
ashelldisponibles = Split(contenidoarchivo, gb.NewLine, "'", True).Extract(1, -1)
ashelladecuados = OrdenesConSalida(orden, ashelldisponibles)
End
Public Function OrdenesConSalida(orden As String, adisponibles As String[]) As String[]
Dim i As Integer
Dim salida As String
Dim posibilidades As New String[]
For i = 0 To adisponibles.Max
'Asignamos cada uno de los disponibles
System.Shell = adisponibles
[i] Shell adisponibles[i] & orden To salida
If Not IsNull(salida) Then
Print "La orden" & orden & "funcionará con " & adisponibles
[i] posibilidades.Add(adisponibles[i])
Endif
Next
Return posibilidades
End
Public Sub Main()
Dim ashelldisponibles As String[]
Dim contenidoarchivo As String
Dim ruta As String = "/etc/shells"
Dim orden As String = " which mam{e,e32,e64} "
Dim ashelladecuados As String[]
contenidoarchivo = File.Load(ruta)
'Convertimos cada línea de contenidoarchivo a un array con split, delimitando con final de línea, un caracter de escape que no existe y eliminamos los espacios vacíos
'Solo nos interesa obtener los elemementos del segundo indice hasta el último indice del array. Usamos la orden Extract
ashelldisponibles = Split(contenidoarchivo, gb.NewLine, "'", True).Extract(1, -1)
ashelladecuados = OrdenesConSalida(orden, ashelldisponibles)
End
Public Function OrdenesConSalida(orden As String, adisponibles As String[]) As String[]
Dim j As Integer
Dim salida As String
Dim posibilidades As New String[]
For j = 0 To adisponibles.Max
'Asignamos cada uno de los disponibles
System.Shell = adisponibles[j]
Shell adisponibles[j] & orden To salida
If Not IsNull(salida) Then
Print "La orden" & orden & "funcionará con " & adisponibles[j]
posibilidades.Add(adisponibles[j])
Endif
Next
Return posibilidades
End
Public Function OrdenesConSalida(orden As String, adisponibles As String[]) As String[]
Dim i As Integer
Dim salida As String
Dim posibilidades As New String[]
For i = 0 To adisponibles.Max
'Asignamos cada uno de los disponibles
System.Shell = adisponibles[i]
Shell adisponibles[i] & orden To salida
If Not IsNull(salida) Then
Print "La orden" & orden & "funcionará con " & adisponibles[i]
posibilidades.Add(adisponibles[i])
Endif
Next
Return posibilidades
End
(26-02-2021, 21:58)jguardon escribió: Pues no sé cómo lo haces, pero a mi me sale bien. Desde donde copias el código? desde el IDE? Quizás la razón sea que lo pegas en el editor del foro de texto enriquecido, yo lo hago pulsando el botón 'Fuente HTML' que no interpreta etiquetas. Luego seleccionas el código y das a la gamba naranja para poner el lenguaje y sale todo bien (aunque si editas el mensaje, se vuelve a joder...).