Почему мой псевдоним не работает над ssh?

9

У меня есть псевдоним, определенный в моем .bashrc

alias l.='ls -d .* --color=auto'

Это очень полезно :), но не работает через ssh:

$ ssh localhost l.
bash: l.: command not found

Это почему?

Занна
источник
1
.bashrcчитается только если оболочка является интерактивной.
user4556274
1
С вашим псевдонимом по ssh, вероятно, не будет никакого цвета, где, если вы измените свой псевдоним, alias l.='ls -d .* --color'тогда появятся цвета. Просто думал, что добавлю это. По крайней мере, я испытывал это.
Терренс
@Terrance Мне было интересно об этом ... У меня все еще нет цвета (и нет столбцов), хотя я получаю цвет (и столбцы), как и раньше, после изменения псевдонима (и выполнения source .bashrc)
Zanna
1
ах ха! Я думаю, что понял. Попробуйте свой псевдоним, как, alias l.='ls -dC .* --color'где Cпоказывает столбцы.
Терренс
1
Я отредактировал ответ, чтобы решить проблему цвета.
Матей Дэвид

Ответы:

10

Пытаться:

ssh localhost -t bash -ci l.

Замечания:

  • Псевдоним должен быть ~/.bashrcна удаленном сервере, а не на вашем локальном компьютере.

  • -iОпция указывает bashзапустить интерактивную оболочку. Псевдонимы по умолчанию включены только в интерактивных оболочках.

  • В -tопции говорит sshо выделении псевдо-терминала. Без этого bashвыдает предупреждение при запуске в интерактивном режиме. Это также позволяет lsцвета. Без этого вам пришлось бы пользоваться --color=always, понимаете man ls.

  • Есть еще один способ включить псевдонимы без установки интерактивного флага, а именно shopt -s expand_aliases. Так что вы можете попробовать:

    ssh localhost 'bash -c "shopt -s expand_aliases; l."'

    Однако:

    • Вы .bashrcможете определить псевдонимы только в том случае, если оболочка использует его в интерактивном режиме. В этом примере оболочка не будет интерактивной в то время.

    • Если вы попытаетесь определить псевдонимы в одной строке, посмотрите это .

Матей Давид
источник
1
это работает .... к твоему объяснению, конечно, но я sshразмышляю про себя :)
Zanna
1
Я имел ввиду вообще при использовании ssh. Да, с localhostэтим не проблема.
Матей Дэвид
ssh ... <cmd>выход, когда <cmd>это сделано. Если вы хотите сохранить оболочку после ls, попробуйте ssh localhost -t 'bash -ci "l.; exec bash"'.
Матей Дэвид
Ага я понимаю. Большое спасибо. Я собираюсь удалить мои комментарии :)
Zanna