2009-07-29 22 views
39

Ssh üzerinden uzaktan bir komut yürütmeye çalışıyorum, örneğin:ssh komut yürütme dikkate almaz .bashrc | .bash_login | .ssh/rc?

ssh <user>@<host> <command> 

Yürütülmesi gereken komut .bashrc, ör.

alias ll='ls -al' 

Sonunda aşağıdaki komutun çalıştırılması gerekir:

Zaten bunu öğrendim .bashrc sadece interaktif kabuk ile kaynaklanır, bu yüzden .bash_login koydum:

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

ve aynı zamanda diğer adı doğrudan .bash_login olarak tanımlamaya çalıştım.

Ayrıca .bashrc'nin .bash_profile ve ayrıca .ssh/rc adresindeki diğer ad tanımlamasını/kaynaklanmasını da denedim. Ama bu işlerin hiçbiri. Bazı ikili yükleme komut dosyasının bir parçası olduğu için ssh komutunun nasıl değiştirileceğini değiştiremediğimi unutmayın. Değiştirebileceğim tek şey çevre. Ssh komutu yürütüldüğünde bu takma adı elde etmek için başka bir olasılık var mı? Uyarlanması gereken bazı ssh yapılandırması var mı?

+0

makine üzerinde bu dosyalar (Bashrc vs.) nerede? Ssh-ing ya da ssh-ing olduğunuz makinen mi? –

+0

Dosyalar, makinemde – blackicecube

+1

için ssh-ing kullanıyorum. Ayrıca kullanıcı için/etc/passwd dosyasını da kontrol ettim./Usr/bin/bash tanımlıdır. – blackicecube

cevap

7

DÜZENLEME: etkileşimli olmayan kabukları hakkında here belirttiği gibi

.. Şimdi


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

, sizin bashrc dosyasındaki her takma i var ki:


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

Bu takma adın adından sola bir dosya oluştur:

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

Şimdi içerecek şekilde Bashrc düzenleyin:


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

Bu iş yok .. O kadar
DÜZENLEME (2)
You yapmanın en iyi yolu olup olmadığından emin değilim rağmen sadece bu takma adlar için bunu yapmak gerekir, bashrc diğer komutlar David tarafından işaret edildiği gibi yürütülecek "komutları çalıştırmak için ssh için yürütülebilir olması gerekir".Bash adam sayfalarından

+0

Öneriniz için teşekkürler. Yükleme betiği tarafından çağrılan takma adlar, yükleme dizininde bir yerde yer alan özel bir bashrc ile tanımlanır. Bu özel bashrc, diğer adların yanı sıra, tanımlanan değişkenlerin çok sayıda dışa aktarılması da vardır. Çözümünüzle, her takma ad/ihracat için bir dosya oluşturmam gerekiyor mu? – blackicecube

+0

Şimdi sizin için çalışmasını umuyorum .. – sud03r

+0

Sadece denedim, maalesef hala çalışmıyor. Emin değilim ama ssh'i çağırırken .bashrc kaynaklı değil gibi görünüyor. – blackicecube

33

:

Aliases expand_aliases kabuk seçeneği shopt

yapmanın birkaç yolu vardır kullanarak ayarlanmadığı sürece kabuk, interaktif olmadığında Genişletilmemişler

shopt -s expand_aliases 
+0

'' Ben seni destekledim, ama ne yaptığını açıklamalısın. – bradlis7

+1

Burada başka bir yerde açıklandığı gibi, kabuk etkileşimli modda değil. Bu, takma adların genişletilmesi seçeneğini sağlar. Dokümanlar: Ayarlanmışsa, takma adlar ALIASES kapsamında yukarıda açıklandığı gibi genişletilir. Bu seçenek etkileşimli kabuklar için varsayılan olarak etkindir. –

+0

Evet, buldum, sadece yorumunuza eklemenizi öneriyordum. Bu komutu ssh $ HOST 'shopt -s expand_aliases; Yapma, ama işe yaramadı. Muhtemelen eğer .bashrc içine koyarsa çalışır, ama denemedim. – bradlis7

24

I: Bu ancak en basit sadece .bashrc dosyasına aşağıdaki satırı eklemektir nstead ait:

ssh [email protected] "bash -c ll" 

denemede:

ssh [email protected] "bash -ic ll" 

bir "interaktif kabuk" kullanmaya bash zorlamak için.

+4

Benim için 'ssh user @ host' bash -lc ll' '- i yerine bir l kullanmalıydım. Hindistan yerine.) – richardkmiller

+0

'-ic' ile denedim ve mükemmel çalıştı! Teşekkürler! – CodeWarrior

+0

Ancak, bu SSH çağrı her takma eklemek zorunda anlamına mı geliyor? Ben" ssh "ll" bölümüne atıfta ediyorum user @ host "bash -ic ll" " –

-3

Açık dosya ~/.bash_profile. Bu dosya ev dizininde bir tane oluşturun ve eklemek için aşağıdaki satırı

kaynak = $ HOME/.bashrc

çıkış için ssh ve Agian giriş ve sizin için çalışan Bashrc ayarlarını almalısınız yoksa.

+0

Bu muhtemelen" kaynak $ HOME/.bashrc "veya". $ HOME/.bashrc "olmalıdır. –

-1

tüm komut görünür olacak takma alternatif

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

Şimdi herhangi komut size

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

Kullanışlı DEĞİŞKEN kullanabilirsiniz ÇALIŞTIR İHRACAT & olduğunu /path/to/my_commands içindeki tüm kısayolları/diğer adlarını yerleştirmek için ve düzenlemek /etc/bash.bashrc

source /path/to/my_commands

+0

Bu, soruya cevap vermiyor. – reinierpost

İlgili konular