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

Я пишу несколько сценариев удара и нуждаюсь в некоторой помощи со способностью найти исполняемый файл в рамках каталога и присвоения его к переменной.

таким образом, я знаю, работаю ли я:

ls -dF `find . -maxdepth 1 \( -perm -1 -o \( -perm -10 -o -perm -100 \) \) -print`

это возвратит что-то вроде этого:

./ravend
./raven-cli

То, что я хотел бы сделать, имеют его возврат:

ravend
raven-cli

и затем имейте что-то как:

выдуманный ='ravend' coincli ='raven-cli'

Я предполагаю, что должен был бы сделать что-то вроде этого пример кода, но я просто не знаю, как записать это

output=$(ps -ef | awk '/siebsvc –s siebsrvr/ && !/awk/ { a++ } END { print a }'); echo $output
0
задан 21 September 2018 в 01:00

1 ответ

Я сказал бы, что выполнение чего-то универсального для получения нескольких результатов и затем использования частей того результата к определенным вещам не является хорошей идеей. Я предложил бы делать больше поиска targetd каждой из переменных.

Игнорируя это, я весело провел время, предложив следующее решение:

#!/usr/bin/env bash

main() {
    local coind coincli
    read -a executables -r < <(find . -maxdepth 1 -type f \( -perm -1 -o \( -perm -10 -o -perm -100 \) \) -printf "%f ")

    (( "${#executables[@]}" > 2 )) && { echo "Found more than 2 executables: ${executables[*]}"; return 1; }

    local word
    word="$(comm -12 --nocheck-order <(grep -o . <<<"${executables[0]}") <(grep -o . <<<"${executables[1]}") | awk '{printf $0}')"

    for executable in "${executables[@]}"; do
        local variable="${executable/${word}/coin}"
        variable="${variable//[^a-z]/}"
        declare "${variable}=${executable}"
    done

    echo "coind: ${coind}"
    echo "coincli: ${coincli}"
}

main "$@"
exit $?

find . -maxdepth 1 -type f \( -perm -1 -o \( -perm -10 -o -perm -100 \) \) -printf "%f " - найдите файлы с исполняемым разрешением в текущем каталоге и только распечатайте имя файла (никакой путь)

comm -12 --nocheck-order <(grep -o . <<<"${executables[0]}") <(grep -o . <<<"${executables[1]}") - найдите слово/символы, которые существуют на оба исполняемых имени

grep -o . <<<"${executables[0]}" - строка разделения в 1 символ на строку (сделанный для обоих исполняемых файлов)

| awk '{printf $0}') - каждый символ печатается на новой строке, это используется для сворачивания его в слово

variable="${executable/${word}/coin}" - замена (однажды) общее слово с coin (будет использоваться для установки переменных позже),

variable="${variable//[^a-z]/}" - удалите все символы, который является ничем a через z (в этом случае удалить - от имени переменной

declare "${variable}=${executable}" - динамично объявите переменную и установите, это - значение.

0
ответ дан 27 October 2019 в 10:28

Другие вопросы по тегам:

Похожие вопросы: