Пример CentOS 7, сборка Relion.
# yum install openmpi-devel fftw-devel fltk-devel
# cp /usr/lib64/openmpi/bin/* /usr/bin/
git clone https://github.com/3dem/relion.git
cd relion/
mkdir -p external/fltk/lib // 'make install' fails if no (empty) lib/ folder
mkdir build
cd build/
cmake..
make
.
[100%] Built target tiltpair_plot
# make install
Результат:Relion-git.040918-1.el7.x86_64.rpm
(2,0 МБ)https://drive.google.com/file/d/1c3loJFCladmqvemHyKu44FxZzdOr-XJN/view?usp=sharing→ Предоставляет /usr/local/bin/{45 файлов}, /usr/local/lib/{ gui _background.xpm, librelion _gui _lib.so, librelion _lib.so }
Загрузите и установите:cd Downloads/ && yum install./Relion-git.040918-1.el7.x86_64.rpm
$ relion
:Графический интерфейс Relion открывается нормально.
$ ldd relion | grep Xlib
libXrender.so.1 => /lib64/libXrender.so.1 (0x00007f2cf841c000)
libXcursor.so.1 => /lib64/libXcursor.so.1 (0x00007f2cf8211000)
libXfixes.so.3 => /lib64/libXfixes.so.3 (0x00007f2cf800b000)
libXext.so.6 => /lib64/libXext.so.6 (0x00007f2cf7df8000)
libXft.so.2 => /lib64/libXft.so.2 (0x00007f2cf7be2000)
libXinerama.so.1 => /lib64/libXinerama.so.1 (0x00007f2cf77a1000)
libX11.so.6 => /lib64/libX11.so.6 (0x00007f2cf7463000)
libXau.so.6 => /lib64/libXau.so.6 (0x00007f2cf60b7000)
# yum provides */libXcursor.so.1
,
И т. д. и т. д., чтобы определить имена вашей «отсутствующей libX **-devel».
Следующий подход будет работать для zsh:
preexec() {
if [[ $1 = <-> ]]; then
$1() {
echo $0
unfunction $0
}
fi
}
Как отмечалось в комментариях к вашему вопросу, у вас не может быть функции с именем переменной. Что это делает, так это использует хук preexec
для перехвата команд до того, как у него появится шанс на сбой и создание временной функции. Я использую вариант этого с почтовой программой nmh для отображения почтовых сообщений e -по номеру.
В bash вы можете использовать функцию command_not_found_handle
.
Позаботьтесь о том, чтобы и)некоторые дистрибутивы уже использовали его, чтобы предоставить функцию «установить foobar , если вы хотите использовать команду foo », и b)он не будет отменять внешние команды, как это делают функции оболочки.
Также обратите внимание, что \d
не поддерживается диалектом регулярных выражений, используемым bash с оператором =~
(, который, кстати, является единственным использованием регулярных выражений в bash ).
2digits(){
echo "$1_or_smth"
}
command_not_found_handle(){
if [[ $1 =~ ^[0-9]{2}$ ]]; then 2digits "$@"
else printf >&2 '%s: command not found\n' "$1"; return 127
fi
}
, затем
$ 33
33_or_smth
$ 444
444: command not found
То же самое работает в zsh с command_not_found_handler
функцией (обратите внимание на разницу в именах --в zsh есть лишний "r" ).
Хотя вы можете имитировать zsh preexec
с ловушкой DEBUG
в bash, вы не сможете проделать трюк из другого ответа, поскольку bash не допускает имена функций, которые содержат только цифры.