Hay un solo comando simple que podría usar para hacer esto en bash
, pero probablemente viola el requisito de "no usar bash
finalización". No obstante, he incluido esto al final de esta respuesta. En cambio, usaré un par de bucles para resolver esto.
Suponiendo que desee encontrar todos los comandos externos ejecutables que comiencen con la letra g
en cualquiera de los directorios enumerados en su$PATH
:
#!/bin/sh
IFS=:; set -f; set -- $PATH; set +f
for dirpath do
for pathname in "$dirpath"/g*; do
if [ -x "$pathname" ]; then
printf 'Executable: %s (%s)\n' "${pathname##*/}" "$pathname"
fi
done
done
Esto primero establece los parámetros posicionales en la lista de directorios contenidos en su variable PATH
. Hace esto configurando IFS
a :
. Esto significa que cuando usamos $PATH
sin comillas, su valor se dividirá en los:
-caracteres de la cadena. Para usar la variable sin comillas de forma segura, también usamos set -f
para desactivar temporalmente el globbing, en caso de que alguna parte de la cadena pueda interpretarse como un patrón de globbing de nombre de archivo. Habilitamos el globbing nuevamente con set +f
porque lo necesitamos más adelante.
Una vez que hemos establecido los parámetros posicionales en la lista de rutas de directorio, iteramos sobre estos. En cada iteración, obtenemos los nombres de ruta de cualquier archivo que comience con la letra g
en ese directorio y probamos cada uno para ver si 1 )existe y 2 )es ejecutable (el -x
test hace ambas cosas ). Si es ejecutable, mostramos su nombre y su ruta completa.
Tenga en cuenta que esto restringe la pregunta para cubrir solo los comandos ejecutables externos en el $PATH
actual. No encontrará alias ni funciones de shell. Tampoco se tendrán en cuenta las utilidades que solo están disponibles como incorporadas -en las utilidades.
Con un shell que entiende ${variable//pattern/word}
para reemplazar un patrón con una cadena en cualquier parte del valor de una variable, y con un find
que sabe -maxdepth
y-executable
(felicitaciones a isaac por mencionar este enfoque en otros lugares):
(
set -f
find -H -- ${PATH//:/ } -maxdepth 1 -type f -name 'g*' -executable
)
Esto desactivaría el globbing para el comando find
, luego buscaría en cada uno de los directorios enumerados en $PATH
cualquier nombre que comience con g
que corresponda a un archivo ejecutable. Esto sería ejecutable solo por el usuario actual. Use -perm -o+x
en lugar de -executable
para probar si el bit ejecutable está configurado para "otros".
La opción -H
para find
hará que resuelva los enlaces simbólicos proporcionados en la línea de comando (, es decir, las rutas de búsqueda ), pero no las encontradas al atravesar las rutas.
Lo anterior era una solución genérica /bin/sh
. Si se le permite usar comandos especiales bash
, puede generar una lista de todos los comandos externos, funciones de shell y alias, que comienzan con la letra g
con
compgen -c g
Para incluir -incorporado en los comandos, use
compgen -bc g
... pero esto puede contar como "usar bash
finalización".
El compgen
construido -en el mando está documentado en el manual bash(1)
.
Когда вы подключаетесь к кластеру Linux с переадресацией X11, вы разрешаете X-клиентам, работающим в кластере, связываться с вашим X-сервером на ПК с Windows 10.
Чтобы это работало, вам нужно запустить X-сервер в первую очередь -, а поскольку Windows — это не Linux, X-сервер не запускается по умолчанию.
XQuartz — это X-сервер для MacOS. Опции для X-сервера для Windows, например. VcXsrv и Xming(не уверены, будут ли они работать в Windows 10 )и на сервере Cygwin X . Возможно, есть еще.
А учитывая разработку подсистемы Windows для Linux (WSL ), возможно, когда-нибудь в будущем появится собственный сервер Microsoft X.
При использовании переадресации SSH X11 отображаемый номер обычно должен быть 10.0 или выше.
Если сообщение об ошибке действительно говорит localhost:0.0
, это предполагает, что в кластере может быть какая-то настройка среды, которая переопределяет переменную DISPLAY
. Не делайте этого:sshd
на удаленном конце автоматически установит правильное значение переменной DISPLAY
как часть инициализации вашего сеанса, когда будет запрошена и принята переадресация X11. Вы не можете знать правильное значение заранее, так как оно зависит от того, сколько других подключений X11 -для переадресации SSH к кластеру уже установлено, когда вы устанавливаете подключение.
Примечание.:Настройка export DISPLAY=<name of your Windows host pc>:0.0
в кластере приведет к тому, что любые приложения попытаются установить небезопасное незашифрованное соединение X11 непосредственно из приложения с сервером X11 на вашем хосте Windows. Это не рекомендуется и может (или, скорее, должно! )блокируется брандмауэрами/NAT на обоих концах.