Intereting Posts
Как изменить сеанс по умолчанию? Как я могу использовать собственный локальный текстовый редактор для изменения системных (требуется root для сохранения) файлов в удаленной системе? адрес источника, выбранный в случае нескольких адресов IPv4 Как переключить пользователя и передать пароль в скрипте Groovy? Отключите некоторые программы от sudo Неизвестное устройство LVM: как восстановить? Настройка Caps Lock в качестве модификатора и переключателя компоновки Как следить за потоками tcp непрерывно вдоль захвата с помощью tshark / wireshark? Проверьте, какой процесс выдает среднюю нагрузку сверху Создать сертификат SSL не интерактивно Как выглядят крупные компьютеры, на которых были подключены реальные терминалы? не удалось смонтировать сгоревшую файловую систему ISO9660 до извлечения и повторной установки носителя RX и TX рассчитываются на различных промежуточных интерфейсах между двумя виртуальными машинами Как установить 64-битную виртуальную машину Linux на 32-битный Linux? Как понять ssh-keygen и ssh-copy-id?

Нежелательный знак вопроса, добавленный к имени каталога при использовании mkdir

Я не уверен, почему, когда я использую mkdir -p $ fbase, нежелательно? добавляется к имени каталога (27obs87St01Rec1?). Я следил за подобными потоками и запускал cat -A имя файла, чтобы увидеть, есть ли в сценарии нежелательные символы, но, похоже, это не так. Я также запускаю имя файла dos2unix. Я пишу сценарий с нуля на Linux-машине, поэтому никакого влияния на Windows не оказывает. Это потому, что я использую параметр $ filebase. Цените любую помощь

#!/bin/csh # Distribute files into separate directories and run SHEBA on each # Check what phase to run analysis for echo "RUN_SHEBA.CSH: CNTRL-C to abort" unalias sac mkdir -p filtered mkdir -p stack mkdir -p plots mkdir -p results # READ STATION LIST set nev = `cat stationlist1.csv | wc -l` echo "NUMBER OF EVENTS=" $nev @ iev = 1 echo $iev # LOOP OVER EVENTS while ($iev <= $nev) echo "CURRENT EVENT=" $iev # EXTRACT EVENT LINE set fbase = `head -$iev stationlist1.csv | tail -1` echo $fbase # CLEAN UP ANY PRE-EXISTING DIRECTORIES \rm -rf $fbase mkdir -p $fbase # COPY THE FILES cp ~/SAC/sac/macros/$fbase.* $fbase cd $fbase 

Полный скрипт ниже …

 #!/bin/csh # Distribute files into separate directories and run SHEBA on each # Check what phase to run analysis for echo "RUN_SHEBA.CSH: CNTRL-C to abort" unalias sac mkdir -p filtered mkdir -p stack mkdir -p plots mkdir -p results # READ STATION LIST set nev = `cat stationlist1.csv | wc -l` echo "NUMBER OF EVENTS=" $nev @ iev = 1 echo $iev # LOOP OVER EVENTS while ($iev <= $nev) echo "CURRENT EVENT=" $iev # EXTRACT EVENT LINE set fbase = `head -$iev stationlist1.csv | tail -1` echo $fbase # CLEAN UP ANY PRE-EXISTING DIRECTORIES \rm -rf $fbase mkdir -p $fbase # COPY THE FILES cp ~/SAC/sac/macros/$fbase.* $fbase cd $fbase ## CONFIGURE SHEBA # BUILD THE ANALYSIS MACRO cat << END >.temporary_sac_shebanew setmacro /apps/SAC/sac/macros window 1 X 0.1 0.6 Y 0.50 1.00 qdp off gtext hardware END echo "m shebanew file $fbase comps C1 C2 C3 pick no plot yes batch yes" >>.temporary_sac_shebanew # RUN SHEBA sac .temporary_sac_shebanew \cp ${fbase}_result.eps ../plots \cp ${fbase}.lam2 ../stack \cp *.final_result ../results cd.. @ iev = $iev + 1 echo "I AM FINISHED" end 

Я вижу в своем хрустальном шаре, что входной файл был подготовлен под Windows.

Я уверен, что персонаж не является вопросительным знаком, это просто способ сказать вам, что есть непечатаемый персонаж. Этот непечатаемый символ является символом возврата каретки (CR, обычно представленным как \r или \015 или ^M ).

Символ CR появляется в конце строк текстовых файлов, которые были созданы в Windows. Windows и Unix представляют текстовые файлы по-разному: Unix использует символ LF ( \n , \012 , ^J ) в качестве ограничителя строки (т.е. каждая строка состоит из его печатных символов, за которыми следует LF), тогда как Windows использует двухсимвольную последовательность CR -LF как разделитель строк (т.е. каждая строка состоит из его печатных символов, за которыми следует CR, за которой следует LF, за исключением того, что последняя строка обычно состоит только из ее печатаемых символов). Поэтому, когда вы копируете текстовый файл Windows в систему Unix, он имеет этот ложный символ CR в конце каждой строки, за исключением иногда последнего. Что касается Linux или других систем Unix, символ CR является обычным символом (хотя и непечатаемым), поэтому он просто остается там и вызывает проблемы.

Вы должны преобразовать файл в текстовый файл Unix. В Linux вы можете использовать

 sed -i -e 's/\r$//' /path/to/file 

Кроме того, чтобы сделать чистую копию, вы можете использовать

 </path/to/windows/file tr -d '\r' >/path/to/unix/file 

Если вы хотите, чтобы ваш скрипт был надежным, удалите CR при чтении файла:

 set fbase = `head -$iev stationlist1.csv | tail -1 | tr -d '\r'`