1

В большинстве случаев я нахожу, что я делаю:

% chmod +x <file> #or +r or +w

Итак, я подумал о создании псевдонима, который бы:

% alias +x='chmod +x' # or
% alias \+x='chmod +x' # or
% alias '+x'='chmod +x'

но это приводит к:

зш: плохой вариант: -x

Есть ли другой метод для создания указанного псевдонима? Я в настоящее время настраиваю их как

% alias c+x='chmod +x'

это не то, что я имел в виду.

1 ответ1

3

Кавычка + в этом контексте не имеет желаемого эффекта, потому что она только говорит zle (редактору командной строки zsh ) принимать + буквально. Сам alias команды по-прежнему получает строку «+x» в качестве первого аргумента командной строки и, таким образом, пытается проанализировать ее как параметр.

Если вы передадите опцию -- команде alias , все, что находится после нее, будет использовано в качестве аргумента, даже если оно начинается с + или - . Чтобы использовать ваш пример:

alias -- +x='chmod +x'
alias -- -x='chmod -x'

Примечание: многие, но не все, другие инструменты ведут себя аналогично, встроенные в zsh, а также внешние команды. Например:

% touch -negative
touch: invalid option -- 'n'
Try 'touch --help' for more information.
% touch -- -negative
% ls -negative
ls: invalid option -- 'e'
Try 'ls --help' for more information.
% ls -- -negative   
-negative
% rm -negative
rm: invalid option -- 'n'
Try 'rm ./-negative' to remove the file '-negative'.
Try 'rm --help' for more information.
% rm -- -negative 

Конечно, вы также можете делать то, что предлагает rm и использовать ./-negative в большинстве (все?) из этих случаев, когда участвуют пути.

Одним заметным исключением является GNU echo . Трудно заставить его распечатать любые параметры, которые он распознает, без дополнительного текста. Например "-n":

% /bin/echo -n
% /bin/echo -- -n
-- -n
% /bin/echo -n -e '-n\n'
-n

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .