Это должны быть две отдельные строки?: `. echo "test" set dat = $dcmdir/$s/scan.log`

Таким образом, проблема, которую вы видите, заключается в том, что вы запускаете for i in $(ls...), ожидая увидеть по одному файлу за раз, а вместо этого просто получаете одну запись со всем списком файлов в одном множестве -строковая строка.

Это вызвано IFS=' 'назначениями в ваших функциях. Они установили пробел в качестве единственного разделителя, что означает, что новая строка больше не будет считаться одной (, и для этого lsнеобходимо было разбить на несколько строк.)

Поскольку вы устанавливаете IFS внутри fCKA1и fCKA2, вы в конечном итоге видите проблему во втором цикле, так как он выполняется после этих функций.

Это можно обойти, например, сохранив исходную IFS перед ее установкой и восстановив ее в конце функции.

Например:

fCKA1() {
    hadoop fs -put $i $HDFS/cka-np1p/$Years/$Months
    sleep 1
    save_IFS=$IFS
    IFS=' '
    while read names rows sizes; do
       ...
    rm -rf $i $i.ctrl
    IFS=$save_IFS
}

Возможно, лучше, вы можете установить его только для команды "чтение" вот так:

IFS=' ' read names rows sizes

В контексте вашей функции вы получаете:

fCKA1() {
    hadoop fs -put $i $HDFS/cka-np1p/$Years/$Months
    sleep 1
    while IFS=' ' read names rows sizes; do
       ...
    rm -rf $i $i.ctrl
}

Также возникает вопрос, нужно ли вообще устанавливать IFS... По умолчанию используется разбиение по пробелам, любым пробелам... Вам действительно нужно разбивать по пробелам и только по пробелам? Попробуйте полностью удалить настройки IFS=' ', возможно, это сработает и для вас!

0
26.02.2020, 22:11
2 ответа

set является оператором в csh.

Является ли эхо-версия скриптом? (но обычно для загрузки модуля в csh используется команда 'source'.)

Что касается моего упоминания версии эха :в классической UNIX большинство вещей, которые используются в сценарии, представляют собой отдельные программы в системе, а не встроенные в оболочку (будь то csh,zsh,sh (bourne ),ksh (Korn )или tcsh (TENEX C Shell ).)

«Тест» в bash (рожден снова оболочкой bourne )является встроенной, как и эхо, в то время как в некоторых других версиях UNIX эхо и тест являются отдельными двоичными файлами.

0
28.04.2021, 23:22

Этот сценарий был значительно испорчен некоторым редактированием вики. В настоящее время он недействителен. Раньше он выглядел совсем иначе .

1
28.04.2021, 23:22

Теги

Похожие вопросы