Tại sao bí danh của tôi không hoạt động trên ssh?


9

Tôi có một bí danh được định nghĩa trong .bashrc

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

Nó rất hữu ích :) nhưng nó không hoạt động thông qua ssh:

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

Tại sao vậy?


1
.bashrcchỉ được đọc nếu shell tương tác.
user4556274

1
Với bí danh của bạn trên ssh, có thể sẽ không có màu, nếu bạn thay đổi bí danh của mình alias l.='ls -d .* --color'thành màu thì sẽ xuất hiện. Chỉ cần nghĩ rằng tôi sẽ thêm điều đó. Ít nhất tôi đã trải nghiệm điều đó.
Terrance

@Terrance Tôi đã tự hỏi về điều đó ... Tôi vẫn không có màu (và không có cột) mặc dù tôi có được màu (và cột) như trước sau khi thay đổi bí danh (và đang làm source .bashrc)
Zanna

1
à ha Tôi nghĩ rằng tôi đã nhận nó. Hãy thử bí danh của bạn như alias l.='ls -dC .* --color'nơi các Ccột hiển thị.
Terrance

1
Tôi chỉnh sửa câu trả lời để giải quyết vấn đề màu sắc.
Matei David

Câu trả lời:


10

Thử:

ssh localhost -t bash -ci l.

Ghi chú:

  • Bí danh phải ở ~/.bashrctrên máy chủ từ xa, không phải trên máy cục bộ của bạn.

  • Các -itùy chọn bảo bashđể chạy một vỏ tương tác. Bí danh được bật theo mặc định chỉ trong các vỏ tương tác.

  • Các -ttùy chọn nói sshđể phân bổ một giả. Nếu không có điều này, bashsẽ phát ra một thông báo cảnh báo khi bắt đầu ở chế độ tương tác. Điều này cũng cho phép lsmàu sắc. Không có nó, bạn sẽ phải sử dụng --color=always, xem man ls.

  • Có một cách khác để bật bí danh, mà không cần đặt cờ tương tác, cụ thể là shopt -s expand_aliases. Vì vậy, bạn có thể thử:

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

    Tuy nhiên:

    • Bạn .bashrcchỉ có thể xác định bí danh nếu nguồn vỏ nó tương tác. Trong ví dụ này, shell sẽ không tương tác tại thời điểm đó.

    • Nếu bạn cố gắng xác định bí danh trên cùng một dòng, hãy xem điều này .


1
điều đó có hiệu quả .... theo lời giải thích của bạn, chắc chắn, nhưng tôi đang sshtự tin vào mình :)
Zanna

1
Tôi có nghĩa là nói chung khi sử dụng ssh. Vâng, với localhostđó không phải là một vấn đề.
Matei David

ssh ... <cmd>thoát khi <cmd>được thực hiện. Nếu bạn muốn giữ vỏ xung quanh sau ls, hãy thử ssh localhost -t 'bash -ci "l.; exec bash"'.
Matei David

Aha tôi hiểu. Cảm ơn rất nhiều. Tôi sẽ xóa bình luận của mình :)
Zanna
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.