имя файла, содержащее пробелы и командная строка bash
Модератор: Bizdelnick
-
- Сообщения: 202
- ОС: Ubuntu 12.04
имя файла, содержащее пробелы и командная строка bash
Название фильма содержит пробелы. Как запустить его, используя командную строку и mplayer?
есть стойкое ощущение, что ранее у меня все запускалось, используя символ "\" перед каждым пробелом. Перебил систему с 32-бит на 64 и не могу стартануть файлы, содержащие пробелы, хотя сам bash по TAB подставляет необходимого вида строку.
openSuse 11.2 x64
есть стойкое ощущение, что ранее у меня все запускалось, используя символ "\" перед каждым пробелом. Перебил систему с 32-бит на 64 и не могу стартануть файлы, содержащие пробелы, хотя сам bash по TAB подставляет необходимого вида строку.
openSuse 11.2 x64
-
- Сообщения: 18
Re: имя файла, содержащее пробелы и командная строка bash
В двойные кавычки пробовал заключить?
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: имя файла, содержащее пробелы и командная строка bash
вчера перечислил 7 способов. вот восьмой, универсальный:
Всё заключаем в одиночные кавычки. После чего, внутренние одиночные кавычки меняем на '"'"'
бинго.
Всё заключаем в одиночные кавычки. После чего, внутренние одиночные кавычки меняем на '"'"'
бинго.
-
- Сообщения: 202
- ОС: Ubuntu 12.04
Re: имя файла, содержащее пробелы и командная строка bash
В просто кавычки заключал, в смесь кавычек - не пробовал. Но это как то геморно получается, хотя, когда приспичит, можно испробовать. Я вообще имел ввиду, может у баша настройки какие или у миднайта что то не так?
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: имя файла, содержащее пробелы и командная строка bash
вы не поняли!
не надо в смесь, заключайте всё в одиночные кавычки
единственное исключение, это если в имени есть такие кавычки, только в этом случае, внутренние кавычки меняются на комбинацию '"'"'
нету настроек таких (ну почти, они вам не сильно помогут), дело в том, что НЕ ТОЛЬКО пробелы мешаются, есть ещё баксы, и прочая хрень (те-же кавычки)
-
- Сообщения: 321
- Статус: Красен глаз -- темна душа
Re: имя файла, содержащее пробелы и командная строка bash
Перебил систему с 32-бит на 64 и не могу стартануть файлы, содержащие пробелы
а может нужно бинарники перекомпилировать? Или баш пишет "command not found" и абсолютно точно, что проблема только с файлами, содержащими пробелы?
anyway, думаю, что выложенный листинг того, что говорит bash был бы кстати
Мой компьютер зовут Марвин
-
- Сообщения: 73
- ОС: Debian GNU/Linux squeeze/sid
Re: имя файла, содержащее пробелы и командная строка bash
drBatty, а где вы перечислили 7 способов? Перечислите ещё раз, здесь, пожалуйста. У меня что-то никак 7, то есть теперь даже 8, не получается =).
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: имя файла, содержащее пробелы и командная строка bash
find, пробелы и массив
как он такое напишет, если "сам по TAB подставляет"?
ЗЫЖ Вообще-то этот способ №4. №8 я ещё не придумал

-
- Сообщения: 202
- ОС: Ubuntu 12.04
Re: имя файла, содержащее пробелы и командная строка bash
Reboot писал(а): ↑16.02.2010 19:22Перебил систему с 32-бит на 64 и не могу стартануть файлы, содержащие пробелы
а может нужно бинарники перекомпилировать? Или баш пишет "command not found" и абсолютно точно, что проблема только с файлами, содержащими пробелы?
anyway, думаю, что выложенный листинг того, что говорит bash был бы кстати
Дык, систему с нуля поставил. Так что, нечего особо перекомпиливать. Попробую еще перегрузиться в 32-битку, а то может меня склерох подводит, и я ни разу не включал файлы с пробелами.
Ругается, собственно, не баш, а мплейер, понимая имя файла как набор отдельных файлов, и ругается, мол не может их найти.
-
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: имя файла, содержащее пробелы и командная строка bash
Странно. OpenSUSE 11.2 x86_64 стоит. MPlayer из пакмана.
По-любому:
Всё запускается без проблем.
bash:
По-любому:
Код: Выделить всё
mplayer Neo\ Tokyo\ -\ \[a4e\].mkv
mplayer 'Neo Tokyo - [a4e].mkv'
Всё запускается без проблем.
bash:
Код: Выделить всё
nicklion@celestial:~> bash --version
GNU bash, version 4.0.35(1)-release (x86_64-suse-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
-
- Сообщения: 202
- ОС: Ubuntu 12.04
Re: имя файла, содержащее пробелы и командная строка bash
NickLion писал(а): ↑17.02.2010 08:31Странно. OpenSUSE 11.2 x86_64 стоит. MPlayer из пакмана.
По-любому:
Код: Выделить всё
mplayer Neo\ Tokyo\ -\ \[a4e\].mkv mplayer 'Neo Tokyo - [a4e].mkv'
Всё запускается без проблем.
bash:
Код: Выделить всё
nicklion@celestial:~> bash --version GNU bash, version 4.0.35(1)-release (x86_64-suse-linux-gnu) Copyright (C) 2009 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software; you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.
Попробую тогда свежий профиль сделать. Может косяк в том, что из 32-битки ломашнюю директорию подрубил как есть.
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: имя файла, содержащее пробелы и командная строка bash
а что вы мучаетесь? ну переименуйте файл в 1.avi
или mv тоже ругается? тогда в mc нажмите SHIFT+F6 на файле.
ЗЫЖ и ещё: повторю, у вас в файле кроме пробелов могут быть кривые символы, например $, !, {, }, [, ] и многие другие.
-
- Сообщения: 202
- ОС: Ubuntu 12.04
Re: имя файла, содержащее пробелы и командная строка bash
Да меняется легко, но видеофайлы я раздаю на торрентах, имя там жестко задано, переименую, потом вспоминай после просмотра, как он там назывался.
Повторюсь, проблема не в том, что пробелы мешают, а в том, что раньше все тип-топ было, а сейчас вот так.
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: имя файла, содержащее пробелы и командная строка bash
ага. используйте команду ln
к примеру:
Код: Выделить всё
ln 'файл с пробелами и всякой фигнёй' 1.avi
эти ссылки практически не занимают место, и не отличимы от файла (на самом деле это тот-же самый файл, просто доступ к нему по другому имени)
проблема в том, что я до сих пор так и не понял, какие имена вызывают у вас проблемы. сам по себе mplayer не режет имена на куски, их режет оболочка. разделители в $IFS, например у меня их 3 шт:
Shell
$ echo -n "$IFS" | od -t x1
0000000 20 09 0a
0000003
какие у вас, и все-ли вы их заэкранировали - не знаю. Проверьте. Либо у вас есть и другие разделители, либо вы какие-то не экранировали.
-
- Сообщения: 202
- ОС: Ubuntu 12.04
Re: имя файла, содержащее пробелы и командная строка bash
drBatty
Так, с ссылками я знаком, а вот что такое экранирование - впервые слышу. Поковыряю на этот счет. Просто я то вряд ли что успел бы с этим сделать: 32-битка стоит от силы пару месяцев, да и то, времени особо не было ее ковырять, а 64 бита стоят с выходных, то есть, вообще ею еще не занимался, разве что настройки кед и все, что с ними связано, перенес через папку /home.
На всякий случай, # echo -n "$IFS" выдал пустую строку. Запустил по ssh. Дойду до дома, испробую еще там.
Так, с ссылками я знаком, а вот что такое экранирование - впервые слышу. Поковыряю на этот счет. Просто я то вряд ли что успел бы с этим сделать: 32-битка стоит от силы пару месяцев, да и то, времени особо не было ее ковырять, а 64 бита стоят с выходных, то есть, вообще ею еще не занимался, разве что настройки кед и все, что с ними связано, перенес через папку /home.
На всякий случай, # echo -n "$IFS" выдал пустую строку. Запустил по ssh. Дойду до дома, испробую еще там.
Код: Выделить всё
mplayer -profile philips IronMaiden_Rock_in_Rio_1\(Live\ concert\).avi
Warning unknown option channel at line 10
MPlayer dev-SVN-r30099-4.4-openSUSE Linux 11.2 (x86_64)-Packman (C) 2000-2009 MPlayer TeamCan't open joystick device /dev/input/js0: No such file or directory
Can't init input joystick
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.
Playing IronMaiden_Rock_in_Rio_1(Live.
File not found: 'IronMaiden_Rock_in_Rio_1(Live'
Failed to open IronMaiden_Rock_in_Rio_1(Live.
Playing concert).avi.
File not found: 'concert).avi'
Failed to open concert).avi.
Exiting... (End of file)
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: имя файла, содержащее пробелы и командная строка bash
просто пробел - это пробел, обычно разделяет имена/слова в bash, а вот если перед пробелом обр. слеш - то это экранированный пробел - обычный символ, и слова не разделяет. так-же можно (нужно) экранировать $, #, ",... и многие другие спец-символы, если вы хотите их использовать как обычные.
ну и что?
у меня разве такая команда? или |od... я так, от балды писал?
я бы джойстик (которого видимо у вас нет) для начала отключил-бы...
и профиль в конец команды поставил-бы..
-
- Сообщения: 202
- ОС: Ubuntu 12.04
Re: имя файла, содержащее пробелы и командная строка bash
ну и что?
у меня разве такая команда? или |od... я так, от балды писал?
Виноват, писал уже в запарке, одной рукой, другой отмахивался от назойливых сотрудников.
Полная ваша команда выдала тот же резалт, что и у вас.
-
- Сообщения: 586
- Статус: -
Re: имя файла, содержащее пробелы и командная строка bash
Немного не по теме, но ведь IFS используется только для разбивки на слова результат bash expansion, а пробел в коммандной строке будет разделителем вне зависимости от значения IFS.
Например, возьмем такой скрипт lspp.sh, чтобы смотреть к-во аргументов:
Код: Выделить всё
#!/bin/bash
# simply list all positional parameters
declare -i i=0
echo "${0##*/}: positional parameters count: $#"
for ((i = 0; i <= $#; i++ )); do
echo "${0##*/}: $i: '${!i}'"
done
тогда
#( IFS=" "; i="a b"; lspp.sh $i ) - два аргумента
#( IFS=""; i="a b"; lspp.sh $i ) - один аргумент
Но
#( IFS=" "; lspp.sh a b ) - два аргумента
#( IFS=""; lspp.sh a b ) - два аргумента
или я не прав?
PS. man bash:
Код: Выделить всё
IFS The Internal Field Separator that is used for word splitting after
expansion and to split lines into words with the read builtin com-
mand. The default value is ``<space><tab><newline>''.
Но если не было expansion, не будет и word splitting.
PS2. пробел же всегда является разделителем (если не было expansion, те если он указан в явном виде), тк при разборе команды баш использует
info bash:
Код: Выделить всё
`blank'
A space or tab character.
и
Код: Выделить всё
`metacharacter'
A character that, when unquoted, separates words. A metacharacter
is a `blank' or one of the following characters: `|', `&', `;',
`(', `)', `<', or `>'.
и
Код: Выделить всё
`word'
A `token' that is not an `operator'.
и
Код: Выделить всё
`token'
A sequence of characters considered a single unit by the shell.
It is either a `word' or an `operator'.