4

Почему большинство команд * NIX my (опыт работы с Linux в основном и редкое столкновение с FreeBDS) имеют такое "безумное" (не интуитивное) поведение по умолчанию, т.е. ОЧЕНЬ отличается от того, что будет делать "эквивалентное" действие GUI.

Наиболее очевидным примером является команда копирования файла, cp , которая по умолчанию в Linux не делает (1) рекурсивное копирование каталогов (очевидно, нелогично для тех, кто приходит в оболочку из-за того, что ранее использовал графический интерфейс, где копирование / вставка копирует каталог и все остальное в it) и (2) следуйте симлинкам (!!) вместо того, чтобы просто копировать их, как они есть (опять же, как и ожидал бы любой пользователь GUI). Таким образом, "нормальная" версия cp которую я представляю по умолчанию, выглядит примерно так: cp -r .

(И опять же, это не "предвзятая" перспектива, уникальная для тех, кто раньше использовал только графический интерфейс). copy команды DOS, например, делает то, что вы ожидаете, как эквивалент cp -r или cp -ra ...)

Другой очевидный пример - это rm когда rm -ri - это то, что любой не-shell-geek ожидает по умолчанию.

И это продолжается с 90% всех команд * NIX, где получить то, что вы интуитивно ожидаете, по умолчанию, это то, чего вы достигнете, добавив еще несколько опций. И дело не в том, что опытный пользователь ожидает, что он станет по умолчанию, не то, что делает начинающий пользователь, для таких вещей, как cp и rm , очевидно, что 99% времени cp -r и rm -r - это то, что вам нужно. И дело не в том, что для обратной совместимости нужно просто так оставаться, так как вы можете просто создать новую оболочку и сохранить #/usr/bin/oldshell или что-то для старой.

Итак, еще раз, вопрос заключается в том, почему стандартные параметры / переключатели команд оболочки * NIX настолько далеки от того, что вы ожидаете интуитивно ожидать? Где я могу найти исторические аргументы о том, как обстоят дела (даже в анекдотических целях), и какова причина, кроме отвратительной обратной совместимости, для текущего положения вещей?


Нашел это на unix.stackexchange, который на самом деле отвечает на МНОГИЕ мои вопросы ...

1 ответ1

3

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

НАПРИМЕР

man cp: -i, --интерактивное приглашение перед перезаписью (переопределяет предыдущий параметр -n)

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

alias rm="rm -i"
alias cp="cp -r"

Но это будет продолжаться только до тех пор, пока вы не выйдете из системы. Чтобы сделать такие параметры постоянными, вы можете поместить эти псевдонимы в файл, который будет читаться вашей оболочкой при каждом входе в систему. Если вы запускаете bash, вы можете поместить свои команды запуска в ~/.bashrc. Как правило, ~/.profile также является хорошим местом для размещения псевдонимов.


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

Ради доброй воли и приветствую вас в мире интерфейса командной строки, я дам вам пару моих любимых псевдонимов. И я дам вам, что cp -i и rm -i намного лучше использовать в качестве команд по умолчанию, потому что очень легко ошибиться и непреднамеренно удалить много файлов. Я не согласен с рекурсивным вариантом.

# basic file manipulation, etc
alias cd....='cd ../..'
alias  cd...='cd ../..'
alias   cd..='cd ..'
alias    cd.='cd .'
alias    cd~='cd ~'
alias   ....='cd ../..'
alias    ...='cd ../..'
alias     ..='cd ..'
alias      ~='cd ~'

alias ls='ls --color=auto'
alias l='ls -CF'
alias l1='ls -1'
alias ll='ls -l'
alias lla='ls -la'
alias la='ls -a'


alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias mc='mv -i'

alias md="mkdir"
alias rd="rmdir"

alias less="less -i"
alias bc="bc -q"
alias KA="killall"

alias swipe='screen -wipe'
alias sdr='screen -dR $1'

# and some functions: 

spelling ()  {      echo $@ | LC_ALL=en_US aspell -a; }

google-search () {
    BROWSER="firefox '%s' &"
    args="${@}";
    args=`echo $args | sed 's/ /%20/g'`;
    url="https://www.google.no/search?hl=en&um=1&sa=1&q=";
    printf "$BROWSER\n" "$url$args" | sh
}

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