1 (24.12.2010 21:14:52 отредактировано mycetophylax)

Доброго времени суток.
По какой причине:

"havearcnoarch=$(ls /data/arch/BASE/arch_$archno??_* | wc -l)"

из скрипта дает:

ls: /data/arch/BASE/arch_: No such file or directory
ls: 664??_*: No such file or directory"

А из консоли все ок. Получаю число.

В скрипте:

#!/bin/bash

У пользователя в passwd аналогично.

2

такое может быть если значение переменной $archno  " 664"
то есть с пробелом перед числом.
тогда происходит попытка выполнить команду
ls /data/arch/BASE/arch_ 664??_*
И вполне закономерно мы получаем две ошибки ab
Покажите весь скрип целиком.

3 (30.12.2010 10:12:37 отредактировано MbI_BCE_YMPEM)

Да есть пробел это вывод sqlplus:

   

   archno=`$ORACLE_HOME/bin/sqlplus -S '/as sysdba' << EOF
   set heading off feedback off termout off
   select trunc(max(sequence#)/100)-2 from v\\$archived_log where applied='YES'; 
   quit;
   EOF`

причем функция ltrim не помогла избавиться от пробела в запросе, но решилась проблему в shell'е:
   
   

havearcnoarch=`ls /smart/arch/LADA_SB/ | grep "arch_$archno??_*" | wc -l`

Может быть кто-то подскажет откуда берется "фантомный" пробел?!

4

MbI_BCE_YMPEM пишет:

Может быть кто-то подскажет откуда берется "фантомный" пробел?!

из SQL.

Вот как убрать:

 Консоль:
$ X=`echo '   Z   ' | sed 's/^ *//; s/ *$//'`
$ echo "'$X'"
'Z'

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

5

чёт у меня

archno=`$ORACLE_HOME/bin/sqlplus -S '/as sysdba' << EOF
   set heading off feedback off termout off
   select trunc(max(sequence#)/100)-2 from v\\$archived_log where applied='YES'; 
   quit;
EOF`

таким макаром ваще не работает не получает номер.

то что выводит sqlplus мб посмореть как

select '"'||(trunc(max(sequence#)/100)-2)||'"' from v$archived_log where applied='YES'; 

?

6 (13.01.2011 14:01:22 отредактировано MbI_BCE_YMPEM)

drBatty пишет:

Вот как убрать:

 Консоль:
$ X=`echo '   Z   ' | sed 's/^ *//; s/ *$//'`
$ echo "'$X'"
'Z'

Одинарные кавычки экранируют $. И я увижу $Z, а не нужное значение. С двойными лучше, но пробел остался.

7

MbI_BCE_YMPEM пишет:

Одинарные кавычки экранируют $. И я увижу $Z, а не нужное значение. С двойными лучше, но пробел остался.

неа.
одинарные кавычки НЕ экранируют $ если они внутри двойных.
попробуйте сами запустить мой пример, вы увидите именно содержимое $X, а вовсе не '$X'

Сами пробелы убираются sed командами замены:

s/^ *//

Эта sed команда убирает пробелы в начале строки.

s/ *$//

А эта в конце.
В php есть trim() для той-же цели.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

8 (13.01.2011 16:15:05 отредактировано MbI_BCE_YMPEM)

Вот так заработало.

archnox=`echo $archno | sed 's/^ *//; s/ *$//'` 
 
echo $archnox 

9

MbI_BCE_YMPEM пишет:

archnox=`echo $archno | sed 's/^ *//; s/ *$//'`

archnox=`echo "$archno" | sed 's/^ *//; s/ *$//'` 

так лучше.
если archno="*", то echo распечатает не звёздочку, а все файлы в каталоге (по вашему варианту).

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

10

да, а ещё лучше "${archno}"

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

11

Спасибо. Плюсану. bx