Почему искажает по стандартным командам, не рекомендуемым?

Сначала удостоверьтесь, что ОС, которую Вы выполняете, настроена для поддержки UTF-8. По-моему, они должны все поддерживать UTF-8 по умолчанию, но некоторые не делают. Не зная, какое распределение Вы используете, трудно дать подробный ответ.

На Ubuntu Вы отредактировали бы файл /etc/default/locale и удостоверьтесь это LANG="en_US.UTF-8" там (если Вы используете другой язык затем en_US может быть что-то еще, но UTF-8 должен ли быть). Если это не, изменитесь/добавьте его и работайте locale-gen, затем перезапустите эмулятор терминала, и Вы сделаны.

19
13.04.2017, 15:36
6 ответов

Предположение, что Вы используете удар, это не должно вызывать проблемы для сценариев, поскольку неинтерактивные оболочки удара не получают ~/.bashrc или ~/.bash_profile (который вероятен или куда Ваши псевдонимы помещаются, или первый шаг к определению источника Ваших псевдонимов в другом сценарии). Это может, однако, вызвать проблемы при определении источника сценариев:

$ alias echo='command echo foo'
$ cat > script << 'EOF'
> #!/bin/bash
> echo bar
> EOF
$ chmod a+x script
$ ./script
bar
$ . ./script
foo bar

Ваш вопрос покрывает большую часть общего беспокойства по поводу искажения по существующим командам, при этом главный - то, что незнакомые среды, которые, кажется, на первый взгляд то же, могли потенциально привести к дико различным результатам. Например, искажение rm кому: rm -i имеет благие намерения, но плох в практике по причинам, которые Вы заявляете.

8
27.01.2020, 19:45

"Есть ли другие причины рекомендовать против этого?"

Конечно:

(3) Поскольку однажды я надеюсь добавить к основам, созданным [-----------] и параноидальные люди, которые отчитывают других за искажение стандартных команд, даже при том, что искажение стандартных команд является, ну, в общем, стандартным.

Серьезно, хотя, это просто протесты. Если Вы доверяете себе для не попадения в какую-либо из тех ям гибели, то просто остерегаются и идут вперед.

Лично, я искажаю очень немного стандартных команд; я использую небольшие изменения, потому что я, просто немного, параноик и анальный сохраняющий. Но одно хорошее использование, которое я нашел для этого, относительно систем, где я часто вхожу в систему как корень или другой пользователь, и существуют некоторые вещи, которые я не хочу случайно/лениво выполнять как корень:

alias irc="echo \"No you don't!\""

или

alias irc="su irc_user"
7
27.01.2020, 19:45

Как экстремальный пример, позвольте мне просто исказить стандартную команду для иллюстрирования, почему искажение стандартных команд может быть вредным:

alias ls='rm'

Очевидно, это плохо, потому что это вызвало бы противное удивление однажды. Аналогично, замена стандартных команд с псевдонимами в конечном счете приведет к неудачному удивлению, когда Вы меньше всего будете ожидать это.

Но позвольте мне представить общий сценарий, который произойдет почти с каждым администратором Unix, когда они совершенствуются в их карьере:

Когда-нибудь в будущем, Вы запустите новое задание и будете работать над новой системой, которая была настроена другими. Это будут три часа утром в субботу, и Вы не думаете прямо и являетесь склонными, чтобы сделать ошибки. Ваша стандартная среда не будет доступна. На самом деле Вы - корень.

Учитывая это, Вы собирающийся помнить это rm не искажается к rm -i? Вы собираетесь проверить на свои специальные псевдонимы каждый раз, когда Вы входите в поле? Если Вы измените среду корня, то Ваши коллеги будут довольны Вашим изменением?

Я нахожусь честно на заборе об этом. Я работал над тысячами систем в своей карьере, и если бы я действительно изменял среду во всех этих системах, то было бы трудно видеть значение.

Искажение rm кому: rm -i очень распространено, и я видел, что он предотвращает много проблем, но это также заставило много неожиданностей и часы дополнительной работы восстанавливать случайно удаленные файлы.

Таким образом, теперь я стараюсь не искажать команды общей системы. Вместо этого я использую псевдонимы и функции, чтобы сделать вещи, которые не может легко сделать оболочка. Что я склонен делать, теперь присоединение дополнительная буква к псевдониму, как:

# List long, with color or special characters, depending on OS
alias  ll='ls -l'
# Long, with metacharacters, show dotfiles, don't show . and ..
alias lll='ls -lA'
# Long, with metacharacters, show dotfiles, show . and ..
alias lla='ls -la'
# List just the dotfiles
alias  l.='ls -l -Ad .????*'

# Useful greps
#alias hgrep='history |grep ${*} |grep -v $$'
alias greph='history |grep ${*}'
alias grepp='ps -ef |grep ${*}'

### Highlight some text.
# From http://unix.stackexchange.com/questions/366/convince-grep-to-output-all-lines-not-just-those-with-matches/367#367
highlight () { grep --color -E "$1|$" $2 ; }

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

# For safety!
alias rm='rm -i'
4
27.01.2020, 19:45
  • 1
    Запоминание флагов для ls могло бы быть более удобным, чем запоминание десяти псевдонимов. –  Bernhard 05.03.2013, 21:08
  • 2
    Очень верный. И на самом деле, я редко использую эти псевдонимы больше. Я не уверен, почему у меня все еще есть они, другой затем, более сложные псевдонимы (и функции) было трудно выяснить и хороши для ссылки. Для простоты я должен, вероятно, удалить их. –  Stefan Lasiewski 05.03.2013, 21:10
  • 3
    "Иллюстрация" (первый пример) не действительно полезна. Это явно злонамеренно, и мы знаем, что заминирование системе может быть вредным. Ваш rm -> rm -i пример намного лучше. Другой хороший был бы тем, который искажает комнату для помещения вещей в a ~/.trash –  derobert 05.03.2013, 21:29
  • 4
    @Bernhard: Правда, но псевдонимы быстрее для ввода. (Но десять слишком многие независимо.) –  Emanuel Berg 06.03.2013, 02:56
  • 5
    @StefanLasiewski: Подсказка: никогда не удаляйте материал, который не показывает по чисто эстетическим причинам. Позвольте им остаться, если они не тревожат Вас активно. Это - такой быстрый материал удаления действия после пребывания в течение часов, настраивая его; и если Вы когда-нибудь сожалеете о нем, Вы чувствуете себя подобно идиоту для того, чтобы не просто позволить им быть. –  Emanuel Berg 06.03.2013, 02:59

Существует больше опасностей для него.

Например, если Вы используете shell-command в Emacs Вы могли бы думать, что получаете "свою" команду (или псевдоним, но Вы не должны ударять ls псевдоним в терминале, что много раз перед упущением всех об установке псевдонима, думая о нем как о любой другой команде...) - на самом деле (назад к Emacs), Вы получаете (неискаженную) команду. Emacs выполнит его без проблемы, таким образом, Вы могли бы даже быть слепыми к тому, что просто произошло!

Что касается различных компьютеров и/или систем, если Вы думаете, что это слишком утомительно для установки человека .rc файлы для них всех, у Вас может просто быть один такой файл, но с if пункты для адаптации.

Например, вместо того, чтобы оценить каждую функцию, когда Вы пишете им, как раз в то самое время, когда Вы испытываете проблемы с любым из них, добавляют их к "черному списку", в последний раз:

if [[ `uname` == "SunOS" ]]; then
  unset -f mic cpkeep mcp mcph cpindex cpconf # not for Solaris
fi
4
27.01.2020, 19:45

Переименование стандарта управляет псевдонимами (т.е. rm=rm -i) материал, конечно, может привести к неожиданностям, где псевдоним не доступен. Я предпочитаю не использовать такой, и (по нескольким горьким, горьким событиям ;-) Я стал приученным к чтению каждой команды дважды, и если это rm или mv или что-либо еще потенциально разрушительное трижды. И такой вывод псевдонимов к автоматическому "нечто комнаты" ВВОДИТ "y" ой!! так или иначе (и стоимость дополнительное нажатие клавиши каждый раз).

Но это - просто я. Если Вы не ожидаете работать в посторонних средах (другие машины, другие пользователи...), и можно установить любимые псевдонимы где бы вы ни были, взбеситься. Unix, как заметно известно, дает пользователям более чем достаточно веревки для стрельбы в их собственные ноги.

3
27.01.2020, 19:45

Другие ответы хороши, но они все единственный взгляд на то, как он влияет на Вас.

Позвольте мне включить ответ @Stephan Laswieski, это - голова немного.

Принятие Вас не является всезнающим, Вы, возможно, должны сделать, чтобы кто-то еще работал над Вашей учетной записью пользователя или советовал Вам относительно того, как сделать что-то.

Затем когда они делают что-то или говорят Вам делать это, это не может работать как ожидалось.

В лучшем случае необходимо будет напрасно тратить время, объясняя им, что произошло (если Вы тут же и можете помнить или выяснить, что псевдоним - то, что вызвало проблему).

В худшем случае посмотрите скручивание на примере в одном из других ответов: исказите ls ='rm-rf'.

0
27.01.2020, 19:45

Теги

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