Command runs okay but not from bash script

Попробуйте так:

find . -type f -exec file '{}' \; | grep -i 'elf 32'
1
24.05.2019, 18:21
1 ответ

Не нужно изощряться в цитировании сценария. Просто убедитесь, что вы указали расширение$1(и любую другую переменную):

в двойных кавычках.
#!/bin/bash

exif=$( file "$1" )
printf '%s\n' "$exif"

или просто

#!/bin/bash

file "$1"

Для запуска:

./script.sh Pics\ 1/img.jpg

или,

./script.sh "Pics 1/img.jpg"

или,

./script.sh "Pics 1"/img.jpg

Что происходит в вашем сценарии, так это то, что вы делаете \часть имени пути. Это не часть имени пути, это просто экранирование пробела в командной строке.

Кроме того, вы назначаете строку evalпеременной среды EXIFна время выполнения команды file. Вы наверное имели ввиду EXIF=$( eval "$CMD" ), но это не нужно (см. выше ).

Если вы действительно хотите сохранить полную fileкоманду в переменной, вам следует использовать массив:

#!/bin/bash

cmd=( file "$1" )
exif=$( "${cmd[@]}" )
printf '%s\n' "$exif"

Опять же, здесь нет необходимости в eval.

... даже если мы напишем это для /bin/sh(, у которого нет массивов, но есть список позиционных параметров, также доступных в bash, очевидно):

#!/bin/sh

set -- file "$1"
exif=$( "$@" )
printf '%s\n' "$exif"
3
27.01.2020, 23:22

Теги

Похожие вопросы