Попытка использовать `pwd` внутри псевдонима дает неожиданные результаты [дубликат]

Это не так уж и плохо, если вы принимаете меры предосторожности. В качестве примера вы можете установить CSF (Настроить брандмауэр сервера) и установить количество разрешенных попыток сбоя, поэтому, если кто-то попробует, скажем, более 5 попыток сбоя ?, то они автоматически заблокируются. Так что вся первая часть лучшего ответчика вообще не будет проблемой. Это случалось со мной много раз, и, к счастью, все участники были заблокированы навсегда. Я думаю, для сервера это не большая проблема, если вы единственный человек, который управляет сервером, но, конечно, если есть много системных администраторов или если вы работаете в организации, тогда, очевидно, не используйте корень. Также для настольного ПК, я думаю, лучше использовать другую учетную запись, поскольку существует риск безопасности, поскольку вы используете много программного обеспечения, но на сервере вы не выбираете случайное программное обеспечение, которому вы не доверяете, вы убедитесь чтобы держать их как можно ниже. Итак, вывод такой: нет, это не вредно, если вы знаете, как правильно управлять сервером.

6
16.08.2016, 11:54
4 ответа

Измените команду так:

alias search="find . -name "

Чтобы она всегда искала только в текущем каталоге, т.е. в текущем рабочем каталоге

.
4
27.01.2020, 20:20

псевдоним определяется один раз вызывается. Нет возможности вызвать команду при вызове псевдонима. Вам нужно написать функцию bash, в которой вы можете запускать подкоманды или, лучше, использовать . (поиск в текущем каталоге) вместо pwd.

0
27.01.2020, 20:20

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

alias search='find `pwd` -name '
20
27.01.2020, 20:20

подстановка команд заключена в двойные кавычки в (t) csh (который вы, кажется, используете), как в оболочках типа Борна.

Итак, в:

alias search "find `pwd` -name "

Вы фактически делаете что-то вроде:

alias search 'find /some/dir -name '

Где / some / dir был текущим каталогом на момент выполнения команды alias .

Здесь вы хотите:

alias search 'find $cwd:q -name'

$ cwd автоматически устанавливается tcsh (как и $ PWD в современных версиях, например, в оболочках POSIX), поэтому вы можно использовать его вместо менее эффективного и менее надежного `pwd` .

Мы используем одинарные (строгие) кавычки, чтобы $ cwd не раскрывались внутри.

$ cwd: q - передать значение переменной как один аргумент, а не позволить ему разделиться.

Также обратите внимание, что вам не нужен пробел после -name выше.

Если вы хотите использовать pwd (например, чтобы получить канонический (без символических ссылок) путь к текущему рабочему каталогу, как в некоторых реализациях pwd , таких как GNU) когда POSIXLY_CORRECT не находится в среде), вы должны использовать:

alias search 'find "`pwd`" -name'

Хотя это не сработает, если путь к текущему каталогу содержит символы новой строки.

Обратите внимание, что вы не можете использовать sudo search , поскольку псевдонимы раскрываются только в позиции команды в (t) csh. В оболочках POSIX вы можете:

alias sudo='sudo '

Сообщать оболочке, что слово, следующее за sudo , также должно подвергаться расширению псевдонима, но этот трюк не работает в (t) csh.

POSIX sh (или bash / zsh / ksh ...) эквивалент будет:

alias search='find "$PWD" -name'
4
27.01.2020, 20:20

Теги

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