Bash: найти и запустить файл - PullRequest
0 голосов
/ 18 июня 2020

Внутри сценария оболочки bash я пытаюсь

  • найти исполняемый файл в неизвестной позиции в текущем каталоге (гарантированно существует)
  • Запустить этот исполняемый файл, передав в набор файлов в качестве аргументов. 1012 *
  • Исполняемого файла не будет в $PATH

В настоящее время я могу найти исполняемый файл, используя:

    #!/bin/bash
    EXECUTABLE=$(find . -name 'executable_name*' -type f)

(подстановочный знак суффикса для платформы- связанные причины)

Попытка затем выполнить его не удалась, возвращается:

    No such file or directory ./path/to/executable_name

* Примечание. Исполняемый файл действительно работает, если я указываю точный путь, возвращенный find явно

Попытка всех следующих двух вариантов не сработает с одной и той же ошибкой:

Насколько я понимаю, использование -exec {} с find передаст результаты find в качестве аргументов в исполняемый файл, что противоположно тому, чего я пытаюсь достичь.

Предварительная установка разрешений на выполнение для целевого файла также дает те же результаты

Ответы [ 2 ]

0 голосов
/ 18 июня 2020

Возможно, исполняемый файл был найден по пути, содержащему пробелы. В этом случае вы должны указать свою переменную в кавычках.

Например:

$ cat with\ spaces/test.sh 
#! /usr/bin/bash
echo test
$ foo=$(find with\ spaces/ -type f -name '*.sh')
$ echo $foo
with spaces/test.sh
$ $foo
bash: with: command not found...
$ "$foo"
test

Другая возможность состоит в том, что в вашем скрипте вы cd переходите в другой каталог где-то между выполнением find (и сохранение его вывода в переменной) и вызов исполняемого файла.

0 голосов
/ 18 июня 2020

попробовать

find . -name 'executable_name*' -type f | bash
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...