Использование подстановочного знака / глобуса (по крайней мере *
и ?
) в bash
вызывает input/output error
когда на самабе нет спичек cifs
смонтировать в Debain Jessie 8.2. В других файловых системах ожидаемый No such file
дана ошибка.
Та же самая точка монтирования samaba на ящике archlinux и без ошибки io. Машина Archlinux mount.cifs
понимает mapposix
. Я подозреваю что mount.cifs
на Джесси не позволяет / понять mapposix
как-то с этим связано.
Есть ли ошибки вокруг io для *
?
## works as expected on cifs mount from centos server
ls /data/Luna1/*adfadf*
# ls: cannot access /data/Luna1/*adfadf*: No such file or director
### unexpected io failure on osx mounted on debian
mkdir /Volumes/Phillips/testdir
## no files match in empty directory: io error
ls /Volumes/Phillips/testdir/*
# ls: reading directory /Volumes/Phillips/testdir/*: Input/output error
## glob matches, ls results
touch /Volumes/Phillips/testdir/file
ls /Volumes/Phillips/testdir/*
# /Volumes/Phillips/testdir/file
## glob matches, ls results
ls /Volumes/Phillips/testdir/*il*
# /Volumes/Phillips/testdir/file
## no files match: io error
ls /Volumes/Phillips/testdir/*foobar*
# ls: reading directory /Volumes/Phillips/testdir/*foobar*: Input/output error
# fails as expected
ls /*filedoesnotexist*
# ls: cannot access /*filedoesnotexist*: No such file or directory
## zsh handles this correctly
zsh -c "ls /Volumes/Phillips/*dne*"
# zsh:1: no matches found: /Volumes/Phillips/*dne*
Системная информация:
cat /etc/debian_version
8.2
dpkg -l cifs-utils
ii cifs-utils 2:6.4-1 amd64 Common Internet File
mount |grep cifs
//gromit/Luna1/ on /data/Luna1 type cifs (rw,relatime,vers=1.0,cache=strict,username=foranw,domain=GROMIT,uid=1000,forceuid,gid=1000,forcegid,addr=10.145.64.52,unix,posixpaths,serverino,nobrl,acl,rsize=61440,wsize=65536,actimeo=1)
//skynet/Phillips/ on /Volumes/Phillips type cifs (rw,nosuid,nodev,noexec,relatime,vers=1.0,cache=strict,username=lncd,domain=SKYNET,uid=1000,forceuid,gid=1000,forcegid,addr=10.145.64.109,file_mode=0755,dir_mode=0755,nounix,nobrl,rsize=61440,wsize=65536,actimeo=1)
Мой текущий обходной путь - прикоснуться к файлу, который соответствует глобусу, чтобы избежать ошибки.
Это особенно хорошо работает для FSL bet
где rm
вызывается с глобусом, который ничего не соответствует. Интересно, что вместо ошибки ввода-вывода он выдает «каталог существует» (когда его нет).
bet 002_mprage_hpf 002_mprage_hpf_brain -m -f 0.1
# /bin/rm: cannot remove '002_mprage_hpf_brain_tmp*': Is a directory.
[ $? -ne 0 ] && echo failed
# failed
против
touch 002_mprage_hpf_brain_tmp_hackyhackhack
bet 002_mprage_hpf 002_mprage_hpf_brain -m -f 0.1
[ $? -ne 0 ] && echo failed
# $? == 0