2009-07-29 28 views
39

Tôi cố gắng để thực hiện một lệnh từ xa thông qua ssh, ví dụ:thực thi lệnh ssh không xem xét .bashrc | .bash_login | .ssh/rc?

ssh <user>@<host> <command> 

Lệnh mà cần phải được thực thi là một bí danh, được định nghĩa trong .bashrc, ví dụ

alias ll='ls -al' 

Vậy cuối cùng thì lệnh sau đây cần được thực hiện:

ssh [email protected] "ll" 

Tôi đã phát hiện ra rằng .bashrc chỉ được có nguồn gốc với vỏ tương tác, vì vậy trong .bash_login tôi đặt:

if [ -f ~/.bashrc ]; then 
    . ~/.bashrc 
fi 

và tôi cũng đã cố gắng xác định bí danh trực tiếp trong .bash_login.

Tôi cũng đã cố gắng đặt định nghĩa bí danh/tìm nguồn cung ứng của .bashrc trong .bash_profile và cũng trong .ssh/rc. Nhưng không có gì trong số này hoạt động. Lưu ý rằng tôi không thể thay đổi cách lệnh ssh được gọi vì đây là một phần của một số tập lệnh cài đặt nhị phân. Điều duy nhất tôi có thể sửa đổi là môi trường. Có khả năng nào khác để nhận được bí danh này khi lệnh ssh được thực thi không? Có một số cấu hình ssh mà phải được điều chỉnh?

+0

Những máy là những tập tin này (.bashrc, vv) trên? Máy bạn đang ssh-ing, hoặc máy bạn đang ssh-ing từ? –

+0

Các tệp trên máy tôi đang ssh-ing đến – blackicecube

+1

Tôi cũng đã kiểm tra/etc/passwd cho người dùng của mình. Nó có/usr/bin/bash được định nghĩa. – blackicecube

Trả lời

7

EDIT:

Như đã chỉ ra here về vỏ không tương tác ..


# If not running interactively, don't do anything 
[ -z "$PS1" ] && return 
# execution returns after this line 

Bây giờ, cứ mỗi bí danh trong tập tin .bashrc của bạn nói rằng tôi có:


alias ll="ls -l" 
alias cls="clear;ls" 

Tạo tệp có tên sau bí danh đó nói cho ll:

 
[email protected]$ vi ssh_aliases/ll 
#inside ll,write 
ls -l 
[email protected]$ chmod a+x ll 

Bây giờ sửa .bashrc để bao gồm:


# If not running interactively, don't do anything 
[ -z "$PS1" ] && export $PATH=$PATH:~/ssh_aliases 

này không được công việc .. mặc dù tôi không chắc chắn nếu nó là cách tốt nhất để làm như vậy
EDIT (2)
Bạn chỉ cần làm điều này cho các bí danh, các lệnh khác trong bashrc sẽ được thực hiện như được chỉ ra bởi David "bạn phải có thực thi cho ssh để chạy các lệnh".

+0

Cảm ơn đề xuất của bạn. Các bí danh được gọi bởi kịch bản cài đặt được định nghĩa trong một bashrc tùy chỉnh nằm ở đâu đó trong thư mục cài đặt, Trong đó bashrc tùy chỉnh bên cạnh các bí danh cũng có rất nhiều các biến được định nghĩa. Vì vậy, với giải pháp của bạn, tôi sẽ cần phải tạo một tập tin cho mỗi bí danh/xuất khẩu? – blackicecube

+0

hy vọng nó hoạt động cho bạn bây giờ .. – sud03r

+0

Tôi vừa thử nó, tiếc là nó vẫn không hoạt động. Tôi không chắc chắn nhưng nó có vẻ như. Bashrc không có nguồn gốc khi gọi ssh. – blackicecube

33

Từ trang người đàn ông của bash:

biệt hiệu không được mở rộng khi vỏ không tương tác, trừ khi tùy chọn expand_aliases vỏ được thiết lập sử dụng shopt

Có một vài cách để làm điều này, nhưng đơn giản nhất là chỉ cần thêm dòng sau vào tệp .bashrc của bạn:

shopt -s expand_aliases 
+0

Tôi upvoted bạn, nhưng bạn nên giải thích những gì nó làm. – bradlis7

+1

Như được giải thích ở nơi khác, trình bao không ở chế độ tương tác. Điều này cho phép tùy chọn mở rộng bí danh. Từ tài liệu: Nếu được đặt, bí danh được mở rộng như được mô tả ở trên trong ALIASES. Tùy chọn này được bật theo mặc định cho các trình bao tương tác. –

+0

Vâng, tôi đã tìm thấy nó, tôi vừa gợi ý bạn thêm nó vào bình luận của bạn. Tôi đã thử thực hiện lệnh đó trong 'ssh $ HOST 'shopt -s expand_aliases; ll'', nhưng điều đó không hiệu quả. Nó có thể hoạt động nếu đặt nó vào. Bashrc, nhưng tôi đã không thử nó. – bradlis7

24

I nstead của:

ssh [email protected] "bash -c ll" 

thử:

ssh [email protected] "bash -ic ll" 

để buộc bash sử dụng một "shell tương tác".

+4

Đối với tôi, tôi đã phải sử dụng 'ssh người dùng @ host" bash -lc ll "' - một l thay vì tôi. (Lima thay vì Ấn Độ.) – richardkmiller

+0

Tôi đã thử với '-ic' và làm việc hoàn hảo! Cảm ơn! – CodeWarrior

+0

Nhưng, điều này có nghĩa là tôi phải thêm mỗi và mọi bí danh trong cuộc gọi SSH? Tôi đang nói đến phần" ll "của" ssh user @ host "bash -ic ll" " –

-3

Mở tệp ~/.bash_profile. Nếu tập tin này không tồn tại tạo ra một trong các thư mục chính và thêm dòng dưới đây

source = $ HOME/.bashrc

thoát ssh của bạn và đăng nhập agian và bạn sẽ nhận được các thiết lập .bashrc làm việc cho bạn.

+0

Điều này có lẽ phải là' nguồn $ HOME/.bashrc' hoặc '. $ HOME/.bashrc'. –

-1

một thay thế cho bí danh mà sẽ được hiển thị trong tất cả các kịch bản là KHẨU & EXECUTE BIẾN

# shortcut to set enviroment to insensitive case 
export go_I="shopt -s nocasematch" 

Bây giờ trong bất kỳ kịch bản mà bạn có thể sử dụng

#!/bin/bash $go_I # go Insensitive [[ a == A ]] # evaluates TRUE ($? == 0) $go_C # maibe want to go back to casesensitive

nó hữu ích để đặt tất cả phím tắt/bí danh trong /path/to/my_commands và chỉnh sửa /etc/bash.bashrc

source /path/to/my_commands

+0

Điều này không trả lời được câu hỏi. – reinierpost

Các vấn đề liên quan