Пользователь сильно изменил свой вопрос, этот ответ был редактированием кода, который пользователь разместил и который больше не существует в его вопросе.
Есть новый код, и вопрос изменился на что-то другое.
Таким образом, этот ответ следует рассматривать как старый (и недействительный) код.
Если я правильно понимаю ваш код.
Вы используете eval только для того, чтобы получить значение двух переменных внутри вашего кода.
Это считается "плохой практикой".
Если вы измените ваш исходный файл с:
LINK=(SRC=/.hd/home/younes/.conky DST=/home/younes/.conky)
на
/.hd/home/younes/.conky /home/younes/.conky
или даже если вы вставите пару значений в документ here, этот код сделает то же самое без eval:
while read SRC DST
do
[[ ! -e $SRC ]] && [[ ! -e $DST ]] && echo "oOpsS! $DST" && exit
[[ ! -e $SRC ]] && mv "$DST" "$SRC"
[[ ! -e $DST ]] && $LINKIT "$SRC" "$DST"
ls -l "$DST" | grep "$SRC" &>/dev/null || $LINKIT "$SRC" "$DST"
done <<\_list_of_dir_pairs_
/.hd/home/younes/.conky /home/younes/.conky
/.hd/home/younes/.fonts /home/younes/.fonts
/.hd/home/younes/.thumbnails /home/younes/.thumbnails
/.hd/home/younes/.xbindkeys /home/younes/.xbindkeys
/.hd/home/younes/.xbindkeys_config /home/younes/.xbindkeys_config
/.hd/home/younes/.xbindkeysrc /home/younes/.xbindkeysrc
_list_of_dir_pairs_
И, если вам действительно нужен массив LINK, сделайте:
LINK=($SCR $DST)
Обратите внимание, что я процитировал var расширения SRC и DST в mv и LINKIT, и изменил LINKIT на $LINKIT (я предполагаю, что это переменная, а не функция. Если нужно, измените обратно).
Todos sirven para diferentes propósitos:
/lib/i386-linux-gnu/libc.so.6
es un enlace simbólico a la biblioteca C x86 de 32 -bits, utilizada para ejecutar ejecutables de 32 -bits; /lib/x86_64-linux-gnu/libc.so.6
es un enlace simbólico a la biblioteca C x86 de 64 -bits, utilizada para ejecutar ejecutables de 64 -bits; /usr/lib/x86_64-linux-gnu/libc.so
es (generalmente )un script de enlace que apunta a la biblioteca C de 64 -bits (dinámico o compartido, según sea necesario )y enlazador dinámico, y se usa para enlazar 64 -ejecutables de bits (al construirlos ). Hay tres tipos diferentes de vinculación al crear y ejecutar programas:
ld
)resuelve todos los objetos usados en el programa durante la compilación, fusiona los objetos que se usan y produce un binario ejecutable que no usa bibliotecas externas; ld
resuelve todos los objetos utilizados en el programa, pero en lugar de almacenarlos en el ejecutable, solo almacena referencias a ellos;ld.so
), o enlazador dinámico, resuelve todas las referencias almacenadas en el ejecutable, cargando todas las bibliotecas requeridas y actualizando todas las referencias de objetos antes de ejecutar el programa. La secuencia de comandos del enlazador libc.so
proporciona instrucciones para ld
, en forma de secuencia de comandos del enlazador:
/* GNU ld script
Use the shared library, but some functions are only in
the static library, so try that secondarily. */
OUTPUT_FORMAT(elf64-x86-64)
GROUP ( /lib/x86_64-linux-gnu/libc.so.6 /usr/lib/x86_64-linux-gnu/libc_nonshared.a AS_NEEDED ( /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 ) )
Por lo general, las bibliotecas dinámicas se configuran utilizando enlaces simbólicos solo(libfoo.so
es utilizado por ld
, y apunta a libfoo.so.1
o lo que sea que sea utilizado por ld.so
, y es en sí mismo típicamente un enlace simbólico al actual -versión instalada de la biblioteca, por ejemplolibfoo.so.1.2.3
). En el caso de la biblioteca GNU C, aunque los programas que se vinculan dinámicamente todavía necesitan algunos símbolos de la biblioteca estática, por lo que se usa un script de enlace para que el enlace pueda probar ambos. La secuencia de comandos del enlazador también hace referencia al enlazador dinámico que se usará en tiempo de ejecución(/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
arriba ), y cuyo nombre está incrustado en los ejecutables (en.interp
).
Los términos "vinculador dinámico" y "cargador dinámico" son sinónimos y se usan indistintamente (consulte la página de manual ld.so
).