Чому мій псевдонім не працює над 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.