%c
Интерпретирует связанный аргумент как символ: только первый символ данного аргумента печатается
У Вас, кажется, уже есть способ распечатать их, но вот один вариант.
for i in `seq 32 127`; do printf "\x$(printf "%x" $i) $i"; done
Оболочка это делает расширение *
подстановочный знак является оболочкой, где Вы вводите его. Если оболочка имеет разрешение прочитать список файлов в каталоге, то это расширяется /temp/sit/build/*
кому: /temp/sit/build/file
, и выполнения sudo
с аргументами ls
, -l
и /temp/sit/build/file
. Если оболочка не может найти соответствие для /temp/sit/build/*
(является ли это, потому что нет никаких соответствий, или потому что оболочка не имеет никакого разрешения видеть соответствия), затем это оставляет шаблон в покое, и sudo
назван с аргументами ls
, -l
и /temp/sit/build/*
.
С тех пор нет никакого названного файла /temp/sit/build/*
, ls
команда жалуется, передаете ли Вы ее то имя. Вспомните это ls
не разворачивает подстановочные знаки, это - задание оболочки.
Если Вы хотите, чтобы подстановочное расширение произошло в каталоге, где у Вас нет разрешения чтения, то расширение должно произойти в оболочке, которой это запускается sudo
вместо в оболочке, которая звонит sudo
. sudo
автоматически не запускает оболочку, необходимо сделать это явно.
sudo sh -c 'ls -l /temp/sit/build/*'
Здесь, конечно, можно сделать sudo ls -l /temp/sit/build/
вместо этого, но это не делает вывод к другим шаблонам.
В некоторых редких случаях вам нужно дважды проверить, не отключили ли вы globbing для вашей оболочки, которая может выдать No such file or directory
при попытке перечислить файлы с подстановочным знаком (*
).
Например:
$ ls /tmp/sit/build/*
/tmp/sit/build/file
$ set -f
$ ls /tmp/sit/build/*
ls: cannot access /tmp/sit/build/*: No such file or directory
$ set +f
$ ls /tmp/sit/build/*
/tmp/sit/build/file
Проверьте help set
для получения дополнительной информации.