2009-06-02 22 views
112

Tôi dường như không thể đặt một $ PATH mới sao cho nó được sử dụng khi thực hiện lệnh qua ssh [email protected] command. Tôi đã thử thêm export PATH=$PATH:$HOME/new_path vào ~/.bashrc và ~/.profile trên máy từ xa, nhưng thực hiện ssh [email protected] "echo \$PATH" cho thấy rằng thay đổi chưa được chọn (nó hiển thị/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/trò chơi). Máy từ xa đang chạy Ubuntu 8.04.

Tôi chắc chắn tôi có thể hack nó vào/etc/profile, nhưng đó không phải là giải pháp sạch và chỉ hoạt động khi có quyền truy cập root.

+0

Tôi đã thử thêm ' xuất PATH = $ PATH: $ HOME/new_path' thành cả ~/.bash_login và ~/.bash_profile (cùng với ~/.bashrc và ~/.profile trước đây đã thử trước đó). Không hoạt động. Trong cả hai trường hợp, tôi phải tạo tệp. –

+0

Trong trường hợp sử dụng cụ thể của tôi, nó không phải là dễ dàng để sửa đổi lệnh gửi đến ssh. Tôi đang sử dụng stfufs (http://www.guru-group.fi/too/sw/stfufs/), cấu trúc lệnh ssh. Tôi nhận ra phương pháp của nó không phải là một giải pháp tuyệt vời, nhưng nó sẽ là tốt đẹp để sửa chữa nó mà không sửa đổi stfufs. –

+0

Bạn có thể đặt một wrapper ssh theo cách stfufs, gọi ssh thực sự với args sửa đổi, nếu đó là dễ dàng hơn – Hasturkun

Trả lời

152

Như grawity nói , ~/.bashrc là những gì bạn muốn, vì nó có nguồn gốc từ các shell không đăng nhập không tương tác.

Tôi hy vọng sự cố bạn đang gặp phải xảy ra với tệp Ubuntu ~/.bashrc mặc định.Nó thường bắt đầu với một cái gì đó như thế này:

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

Bạn muốn đặt bất cứ điều gì cho vỏ không tương tác trước dòng này.

+1

Đúng, tôi đã di chuyển 'xuất PATH = $ PATH: $ HOME/new_path' phía trên dòng đó và nó hoạt động. Cảm ơn! –

+2

.bashrc không đáng tin cậy. bash: "Bash cố gắng xác định khi nào nó được chạy với đầu vào tiêu chuẩn của nó được kết nối với một kết nối mạng". Điều này làm việc trên RHEL, nhưng không phải trên Archlinux. Tôi đã phải chỉnh sửa/etc/môi trường để thay đổi mặc định PATH – basin

6

Bạn luôn có thể nói:

ssh remotemachine 'export PATH=wedontneedastinkingpath; echo $PATH' 
+0

Giải pháp này không cần bất kỳ thay đổi trên máy từ xa, đó là một điều tốt. –

29

Bạn có một ~/.bash_login hay ~/.bash_profile?

Bash trong kiểm tra chế độ tương tác cho những tập tin này, và sử dụng đầu tiên hiện một, theo thứ tự này:

  1. ~/.bash_profile
  2. ~/.bash_login
  3. ~/.profile

Vì vậy, nếu bạn có số ~/.bash_profile, sau đó bất kỳ thay đổi nào bạn thực hiện cho ~/.profile sẽ không được nhìn thấy.

Bash trong chế độ không tương tác đôi khi đọc file ~/.bashrc (mà cũng thường source'd từ kịch bản tương tác.) Bằng cách "thỉnh thoảng" Tôi có nghĩa là nó là phân phối phụ thuộc vào: khá kỳ quặc, có một tùy chọn biên dịch-thời gian cho việc này. Debian cho phép đọc ~/.bashrc, trong khi ví dụ: Arch thì không.

ssh dường như đang sử dụng chế độ không tương tác, vì vậy ~/.bashrc là đủ. Khi gặp vấn đề như thế này, tôi thường thêm một vài echo để xem những tập tin nào đang được chạy.

+0

Thêm tiếng vang đã giúp ... nhưng tôi vẫn đang tìm cách thực hiện 'ssh -X remotemachine' xterm '' và có đường dẫn hệ thống/người dùng đầy đủ từ/etc/profile và ~/home/username/.bash_profile . Nếu tôi nguồn cả hai tập tin trong lệnh, nó hoạt động .. nhưng xấu xí của nó:). – Jess

+0

Làm thế nào để bạn biết rằng "Bash ở chế độ phi tương tác đọc tập tin' ~/.bashrc' "? Tôi không thấy tuyên bố này trong manpage. Cảm ơn – nknight

+3

Nếu bạn muốn một vỏ không đăng nhập không tương tác với nguồn '~/.bashrc', có vẻ như bạn cần phải thiết lập thêm biến môi trường' BASH_ENV'; xem http://superuser.com/a/585699/100843. Đối với các shell đăng nhập không tương tác, bạn có thể phải sửa đổi một trong ba tập lệnh khởi động mà bạn đã đề cập. – nknight

18

tài liệu ssh nói:

Nếu lệnh được chỉ định, nó được thực hiện trên máy chủ từ xa thay vì một vỏ đăng nhập.

đó là lý do tại sao việc thêm vào tệp bashrc không hoạt động. Tuy nhiên bạn có các tùy chọn sau:

  1. Nếu tùy chọn PermitUserEnvironment được thiết lập trong cấu hình sshd, bạn có thể thêm PATH của bạn thiết lập để ~/.ssh/environment

  2. ssh remotemachine 'bash -l -c "somecommand"'

+0

1. Nó không được thiết lập trong cấu hình sshd của tôi và 'man sshd_config' nói rằng nó bị tắt theo mặc định vì vậy nó không chắc giải pháp này sẽ làm việc cho hầu hết mọi người. 2. Điều này có hiệu quả, nhưng tôi không thể dễ dàng sửa đổi lệnh được gửi tới ssh (xem nhận xét thứ hai về câu hỏi của tôi). –

+1

1. Không hoạt động như mong muốn, vì trong ~/.ssh/environment, bạn không thể thêm đường dẫn vào PATH, vì $ PATH sẽ không được giải quyết. – not2savvy

2

Chỉ cần có cùng một vấn đề bản thân mình, giải quyết nó với:

ssh [email protected] PATH=\$HOME/bin:\$PATH\; remote-command 
2

Ngoài @signpolyma câu trả lời, bạn sẽ có thêm xuất khẩu của bạn trước khi những dòng này

# If not running interactively, don't do anything 
case $- in 
    *i*) ;; 
     *) return;; 
esac 
+0

Tôi thực sự chỉ cần bình luận ra những dòng hoàn toàn - tìm thấy trong ~/.bashrc trong Ubuntu 16.04 LTS máy tính để bàn. Không có gì hoạt động cả. Cũng đặt PermitUserEnvironment thành yes. – Ernie

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