stat работает в командной строке, но не при передаче в переменную - PullRequest
0 голосов
/ 07 апреля 2019

я отладки Баш скрипт (на Ubuntu), чтобы получить размер блока файла изображения с помощью stat. Результат от stat правильно в командной строке, но не тогда, когда передается в переменную (как в сценарии).

Если я использую stat команду в командной строке, я получаю то, что хочу (количество блоков,% б):

stat --format=%b image.png

Выход, например: 72

Но если я прохожу то же самое в переменную (в командной строке или в сценарии), например, так:

b = $(stat --format=%b image.png); echo $b

Я получаю этот вывод:

 15:16:57 up  3:47,  0 users,  load average: 0.52, 0.58, 0.59
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT

Тем не менее, когда я "проверяю" мой скрипт с помощью /bin/bash -x ../script.sh, переменная b, определенная, как указано выше, за исключением того, что имя файла изображения передается как переменная, как показано, содержит это значение:

+ b = 328
 15:47:39 up  4:18,  0 users,  load average: 0.52, 0.58, 0.59
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT

Что я пропустил?

Это мой сценарий:

#!/bin/bash

## Run in a folder containing image files to return the html <img /> links.

touch img_reflinks.html

generate_list ()
{
  ls  .| egrep '\.png|\.svg|.jpg|.jpeg|.tiff'
}

for f in $(generate_list)
do
    str=''
    style=''

    # the filename prints correctly:
    echo "$f"

    # this is the problematic assignment, as in CL:
    b = $(stat --format=%b "$f")

    style="\"width:" + "$b" + "px;\""

    str="<img src=\"" + "$f" + "\", style=" + "$style" + "/>\n"

    echo "$str" >> img_reflinks.html
done

1 Ответ

0 голосов
/ 07 апреля 2019

В объявлении переменной не должно быть пробелов; так вместо

b = $(stat --format=%b image.png); echo $b

сделать

b=$(stat --format=%b image.png); echo $b

И вместо

ls  .| egrep '\.png|\.svg|.jpg|.jpeg|.tiff'

до:

for i in *.png *.svg *.jpg *.jpeg *.tiff; do
    # ...
done
...