Я пишу несколько сценариев удара и нуждаюсь в некоторой помощи со способностью найти исполняемый файл в рамках каталога и присвоения его к переменной.
таким образом, я знаю, работаю ли я:
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
Я сказал бы, что выполнение чего-то универсального для получения нескольких результатов и затем использования частей того результата к определенным вещам не является хорошей идеей. Я предложил бы делать больше поиска 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}"
- динамично объявите переменную и установите, это - значение.