ZSH twierdzi „niepoprawny argument” podczas przekierowywania scanimage do pliku ze znacznikami czasu na SMB

0

Przez chwilę zbyt długo drapałem się po głowie, więc może ktoś tutaj będzie w stanie zobaczyć, co się dzieje. Próbuję zbudować polecenie do skanowania z mojego skanera do pliku ze znacznikami czasu w moich dokumentach.

scanimage -d "pixma:04A91746_57E9C3" --resolution 300 --format tiff > $(date +%Y.%m.%d-%H:%M:%S).tiff

Powoduje to błąd zsh: invalid argument: 2017.05.27-14:29:13.tiff

Co dziwne, usuwając sekundy w łańcuchu formatu daty, błąd nie występuje, ale plik nie jest odpowiednio nazwany:

scanimage -d "pixma:04A91746_57E9C3" --resolution 300 --format tiff > $(date +%Y.%m.%d-%H:%M).tiff

Skończyło się na pliku o nazwie 2017.05.27-14, brak minut i rozszerzenie .tiff.

Aby jeszcze bardziej skomplikować sprawy, wszystko to działa doskonale, gdy nie jest w udziale samby, ale te same polecenia w udziale samby powodują błąd. Testowanie za pomocą echa zamiast scanimage nie ujawnia niczego interesującego, ponieważ używanie echa powoduje, że zachowuje się zgodnie z oczekiwaniami.

Stephen Smith
źródło
1
Co się dzieje, gdy używasz podwójnych cudzysłowów? … > "$(date +%Y.%m.%d-%H:%M:%S).tiff"
Kamil Maciorowski
To działa dobrze dla mnie z bash i zsh: echo foo > $(date +%Y.%m.%d-%H:%M:%S).tiff
Cyrus
Cytaty @ KamilMaciorowski nie wydają się niczego zmieniać.
Stephen Smith
@Cyrus Wygląda na to, że działa echo, ale nie z scanimage. Co więcej, odkryłem kolejny dziwactwo, które wydaje się naprawdę komplikować rzeczy: Ten problem występuje tylko podczas skanowania do udziału w sambie I przekierowuję wyjście scanimage w przeciwieństwie do echa.
Stephen Smith

Odpowiedzi:

1

Problemem okazały się dwukropki - ponieważ mój udział w sambie nie zezwala na nazwy plików z dwukropkami, dałby ten błąd. Usunięcie dwukropków z mojej nazwy pliku powoduje, że działa ona idealnie:

scanimage -d "pixma:04A91746_57E9C3" --resolution 300 --format tiff > $(date +%Y.%m.%d-%H.%M.%S).tiff

Jeśli ktoś jest ciekawy ukończonego skryptu do skanowania i porządkowania dokumentów, tutaj:

#!/bin/bash
finish="-1"
page=1
date=$(date +%Y.%m.%d-%H.%M.%S)
while [ "$finish" = '-1' ]; do
  echo -e "\e[1m\e[32m==>\e[0m Scanning page $page..."
  scanimage -d "pixma:04A91746_57E9C3" --resolution 300 --format tiff > $date-$page.tiff
  while true; do
    echo -en "  \e[1m\e[34m->\e[0m More pages? [y/n] "
    read answer
    case $answer in
      [Yy]* ) page=$((page+1)); break;;
      [Nn]* ) finish="1"; break;;
      * ) echo -e "  \e[1m\e[34m->\e[0m Please answer tes or no.";;
    esac
  done
done
echo -e "\e[1m\e[32m==>\e[0m Converting $page page(s) to PDF..."
convert $date-*.tiff $date.pdf
echo -e "\e[1m\e[32m==>\e[0m Cleaning up..."
rm $date-*.tiff

Po prostu cd do dowolnego folderu (paragony, medyczne, itp.) I uruchamiam scanfile. Wynik to pdf wszystkich stron zeskanowanych w bieżącym katalogu.

Stephen Smith
źródło