LINUX.ORG.RU
ФорумAdmin

Вчера работало, сегодня нет: простая команда на bash

 


0

1

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

for FILE in "$DOME/$SH/"*; do "$FILE" & done
лазил по интернету и нашел похожую команду, но ошибка не изменилась
for FILE in $DOME/$SH/*; do wc -l $FILE; stat -c %s $FILE; done 
тело выглядит примерно так
#!/bin/bash 

export MAX_FILESIZE=25000  # 1024 байта = 1 КБ
export NUMBER_OF_FILES=5

export DOME=home/local     
export SH=fsh  
export FILE=bzip2   
export APPS=APPS  

#for FILE in "$DOME/$SH/"*; do "$FILE" & done 

for IFILE in $DOME/$SH/*; do wc -l $IFILE; stat -c %s $IFILE; done   

exit
права на файлы стоят 777, пути правильные, все файлы на своих местах. какие предположения?

Перемещено hobbit из general



Последнее исправление: hobbit (всего исправлений: 1)

что должен делать этот скрипт? переменная APPS не используется переменной FILE присваивается новое значение в цикле

или это только начало? или это весь скрипт?

BACR
()
Ответ на: комментарий от BACR

что должен делать этот скрипт? переменная APPS не используется переменной FILE присваивается новое значение в цикле

или это только начало? или это весь скрипт?

APPS на експорт пошел, там три файла, этот главный index который вызывается ./index.sh

zte
() автор топика
Ответ на: комментарий от masa

В папке появился файл с пробелом?

до этого не доходит

zte
() автор топика

Как именно выглядит сообщение об ошибке?

хотя он там есть.

Ну дак добавьте в скрип ls на этот файл, может вы запускаете скрипт в другом каталоге, у вас же DOME содержит относительный путь.

mky ★★★★★
()

Файл с пробелом в имени появился, например

cobold ★★★★★
()
Ответ на: комментарий от zte

т.е. этот скрипт выполняет другие исполняемые файлы в указаной директории?

попробуй так

for i in "$DOME/$SH/"*
  do eval "$i" &
done
BACR
()
Последнее исправление: BACR (всего исправлений: 1)
Ответ на: комментарий от mky

если вот так

for FILE in /$DOME/$SH/*; do ls $FILE; done
то в терминале перечислены все файлы а если без ls то пишет что нет такого файла или каталога

zte
() автор топика
Последнее исправление: zte (всего исправлений: 1)
Ответ на: комментарий от zte

export DOME=home/local

Слеш перед /home пропущен. Путь не абсолютный, а относительный. Если запускаешь не из корня, то это значит точно не /home/local, а текущаядиректория/home/local

export FILE=bzip2

Это вообще не имеет смысла. Ты же $FILE в цикле присваиваешь…

Ты откуда накопировал кусков, которых не понимаешь?

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)
Ответ на: комментарий от zte

то в терминале перечислены все файлы а если без ls то пишет что нет такого файла или каталога

Сделать-то что надо? Запустить эти файлы?

CrX ★★★★★
()
Ответ на: комментарий от zte

возможно где-то IFS переопределена и разделитель неправильно работает, хотя тогда бы и ls показала что нет файла

for FILE in "$DOME/$SH/"*; do "$FILE" & done

нужно возможно так:

for FILE in "$DOME/$SH/"*; do "$FILE" &; done

screamager
()

Это надо не так дебажить, не вставкой всего что нашёл в интернете. Вывести хотя бы список всего что попадает в FILE.

for IFILE in $DOME/$SH/*; do echo "file: $IFILE"; done

права на файлы стоят 777

Из пушки по воробьям.

файл является каталогом

Ну так и кто ж там запретит среди файлов создать каталог? Тем более с правами 777. Надо ещё проверять что это: файл, каталог, симлинк, устройство, пайп, итд.

neumond
()
ls -1 | while read FN ; do ... ; done

Или find. Можно xargs.

kostik87 ★★★★★
()

Может случайно удалили корень / у DOME? Наверняка подразумевалось DOME=/home/local . И почему не HOME?

А вообще, перед постингом тут запускайте bash -x ваш скрипт и показывайте что «не работает».

vodz ★★★★★
()

Возможно, то что вы хотите исполнить проще добиться посредством

find … -exec {} \;

где вместо следует подставить правильные параметры для find.

ugoday ★★★★★
()

Предположу, что тут замешаны виндузятники со своим CRLF. Скрипт во многих редакторах выглядит, как рабочий, но вот интерпретатора #!/bin/bash^M (или на чём там пишете) система найти не может. На что и жалуется.

NightSpamer
()
Ответ на: комментарий от zte

Исполняемые файлы скрипты или бинарники? Если бинарники, то ldd на них, может им какой библиотеки не хватает. А может noexec опция монтирования на /home...

mky ★★★★★
()

возможно причина в том что в каталоге появился файл/каталог с пробелом в название

поэтому лучше в команде

for IFILE in $DOME/$SH/*; do wc -l "$IFILE"; stat -c %s "$IFILE"; done

экранировать переменные «$IFILE»

dark-initr0
()
Ответ на: комментарий от zte

если вот так for FILE in /$DOME/$SH/*; do ls $FILE; done то в терминале перечислены все файлы а если без ls то пишет что нет такого файла или каталога

Сделайте

for FILE in /$DOME/$SH/*; do echo "$FILE";"$FILE"; done

и поизучайте внимательно последний файл перед ошибкой

annulen ★★★★★
()
Ответ на: комментарий от annulen

команда о которой я писал что не работает заработала сама по себе сам не знаю как, но запись в файлы не происходит как раньше

zte
() автор топика
Ответ на: комментарий от imb

у меня что то с системой или с компом не знаю одни и теже ошибки что на сервере что на десктопе. пробовал установить через терминал tails думал еще там проверю и вот

1: 3���؎м: not found
f�Y�B��H�����?Q��@��RPf1�f�@�܋NV�FZPQ���v��Af�FNf�VRS����1�_YXf�f���Zr��U�u��s
                                                                 Uf
                                                                   f
                                                                    U
                                                                     t
                                                                      �E0t!�u�����!�u.��Missing: not found

zte
() автор топика
Ответ на: комментарий от zte

Проблема с кодировкой или шрифтом в терминале.

kostik87 ★★★★★
()
Ответ на: комментарий от zte
LANG=en_US.utf8 sh -x /full/path/to/your/script

локаль можете выбрать по своему усмотрению

посмотреть доступные

$ locale -a
C
C.utf8
en_US.utf8
POSIX
ru_RU.utf8
imb ★★
()
Ответ на: комментарий от mky

Исполняемые файлы скрипты или бинарники? Если бинарники, то ldd на них, может им какой библиотеки не хватает. А может noexec опция монтирования на /home...

поставил Tails, скрипт заработал, но не совсем вот выхлоп

amnesia@amnesia:~$ '/home/amnesia/index.sh' 
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
: Нет такого файла или каталога
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
curl: (7) Failed to connect to 127.0.0.1 port 9050 after 2 ms: Couldn't connect to server
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
curl: (7) Failed to connect to 127.0.0.1 port 9050 after 2 ms: Couldn't connect to server
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
curl: (7) Failed to connect to 127.0.0.1 port 9050 after 2 ms: Couldn't connect to server
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
curl: (7) Failed to connect to 127.0.0.1 port 9050 after 1 ms: Couldn't connect to server
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
curl: (7) Failed to connect to 127.0.0.1 port 9050 after 1 ms: Couldn't connect to server
: Нет такого файла или каталога
: Нет такого файла или каталога

один файл сработал по запросу а другой нет, хотя я дублировал все из одного файла, почему так понятия не имею.

zte
() автор топика
Последнее исправление: zte (всего исправлений: 1)
Ответ на: комментарий от zte

bash не сломан, просто в #!/bin/bash^M последний символ — это виндовый разрыв строки. А бить надо того, кто его туда запихнул.

P.S. Если проблема не решаема на социальном уровне (т.е. люди в принципе не понимают, в чём разница LF и CRLF и как правильно сохранять файлы), то можно для перестраховки обрабатывать все скрипты dos2unix перед выполнением.

annulen ★★★★★
()
Ответ на: комментарий от annulen

bash не сломан, просто в #!/bin/bash^M последний символ — это виндовый разрыв строки. А бить надо того, кто его туда запихнул.

я решил проблему в Tails такой командой, через ubuntu лень было проверять ее наверно вообще переустановить надо

sed -i 's/.$//' '/home/amnesia/fshes/1.sh' # удаляем CR/LF
zte
() автор топика
Последнее исправление: zte (всего исправлений: 1)
Ответ на: комментарий от annulen

ага не тут то было оноопять вступило со мною в бой

zte
() автор топика
Ответ на: комментарий от zte

Это не удаление CR, а удаление последнего символа в строке без разбору. Используйте dos2unix.

annulen ★★★★★
()

АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ

Отсыпал тебе заглавных букв, пользуйся на здоровье.

hobbit ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.