Отсутствует то, что ваша команда компоновщика
gcc -shared -Wl,-soname,libnew.so.1 -o libnew.so.1.0 *.o -L. -lold
не копирует объекты из libold.so
, но ссылается на к символам в этом файле, чтобы сообщить динамическому загрузчику, где он может получить эти символы.
Обычно, когда кто-то пытается подавить / скрыть данную библиотеку, они начинают с рекомбинации объектных файлов, которые использовались для создания разделяемой библиотеки. Вы могли сделать это с помощью частичного связывания , но я не вижу решения (поскольку разделяемые библиотеки и разделяемые объекты не взаимозаменяемы).
Дополнительная литература:
ld
- GNU linker Помимо всех причин, по которым сценарии не должны быть написаны на csh
, вы смешиваете синтаксис bash и синтаксис csh в своем скрипте.
Вы начинаете свой цикл с csh
foreach
и пытаетесь закончить их с помощью bash
done
. Выходом из цикла для csh
foreach
является end
, а не done
. Кроме того, у вас есть переменная VISIT
, которую вы вызываете $VIS
в операторе grep.
Таким образом, сценарий будет синтаксически корректен в csh с:
#!/bin/csh
foreach SUB (1 2 3 4 5 6 7 8 9 10 11 12 13 14)
echo $SUB
foreach VISIT (1 2 3 4 5 6 7 8)
echo $VISIT
grep 'StudyDate' -f /home/colourlab/Desktop/DrummingDTI/D${SUB}/D${SUB}V${VISIT}/scout/001/infodump.dat
end
end
или в bash:
#!/bin/bash
for SUB in 1 2 3 4 5 6 7 8 9 10 11 12 13 14; do
echo $SUB
for VISIT in 1 2 3 4 5 6 7 8; do
echo $VISIT
grep 'StudyDate' -f /home/colourlab/Desktop/DrummingDTI/D${SUB}/D${SUB}V${VISIT}/scout/001/infodump.dat
done
done
EDIT 2017/04/03
Вот версия скрипта bash, которая добавляет тест для файла:
#!/bin/bash
idf_pfx="/home/colourlab/Desktop/DrummingDTI"
idf_sfx="scout/001/infodump.dat"
for SUB in 1 2 3 4 5 6 7 8 9 10 11 12 13 14; do
echo $SUB
for VISIT in 1 2 3 4 5 6 7 8; do
echo $VISIT
idfile="${idf_pfx}/D${SUB}/D${SUB}V${VISIT}/${idf_sfx}"
if [ -f "${idfile}" ]; then
grep 'StudyDate' $idfile
else
echo "No studydate file: $idfile"
fi
done
done
Ваше сообщение об ошибке не соответствует отображаемому коду. $ SUB - это хорошо определенная переменная, и csh не будет скучать по ней. Скорее csh выдаст ошибку «done: команда не найдена», которую вы должны были получить. Вы уверены, что скопировали правильное сообщение?