Řešení 1:
Zkuste to udělat místo toho
if [ "$SSH_TTY" ]
then
source .bashc_real
fi
Řešení 2:
Mikeova odpověď bude pravděpodobně fungovat. Ale stojí za to zdůraznit, že toho můžete dosáhnout pečlivým výběrem spouštěcích souborů, do kterých vložíte podrobné informace. Z manuálové stránky bash:
Když je bash vyvolán jako interaktivní přihlašovací shell nebo jako neinteraktivní shell s volbou --login, nejprve načte a provede příkazy ze souboru /etc/profile, pokud tento soubor existuje. Po přečtení tohoto souboru hledá ~/.bash_profile, ~/.bash_login a ~/.profile v tomto pořadí a čte a provádí příkazy od prvního, který existuje a je čitelný. Volba --noprofile může být použita při spuštění shellu k potlačení tohoto chování.
Když je spuštěn interaktivní shell, který není přihlašovacím shellem, bash readsand provede příkazy z ~/.bashrc, pokud tento soubor existuje. Tomu lze zabránit použitím volby --norc. Volba --rcfile file vynutí číst a spouštět příkazy ze souboru namísto ~/.bashrc.
Nástroje sftp/scp spouštějí interaktivní nepřihlašovací shell, takže bude zdroj .bashrc. Mnoho distribucí pochází z .bashrc z .bash_profile nebo naopak, takže to může být matoucí. Dobrým trikem pro testování čistoty vašeho přihlašovacího prostředí je použít ssh pomocí příkazu, který simuluje stejný způsob připojení scp/sftp. Například:ssh myhost /bin/true
vám přesně ukáže, co scp/sftp vidí, když se připojí.
Jednoduchá ukázka:
[email protected]:~$ echo "echo Hello from .profile" > .profile
[email protected]:~$ echo "echo Hello from .bashrc" > .bashrc
sazerac:~ insyte$ ssh mazer /bin/true
Hello from .bashrc
sazerac:~ insyte$
[email protected]:~$ rm .bashrc
sazerac:~ insyte$ ssh mazer /bin/true
sazerac:~ insyte$
První test způsobí přerušení scp/sftp/rsync atd. Druhá verze bude fungovat dobře.
Řešení 3:
Pokud používáte csh:
if ($?prompt)
... interactive stuff ...
A pokud je to bash:
if [[ $- == *i* ]]; then
... interactive stuff ...
fi
nebo alternativně pomocí regulárních výrazů bash:
if [[ $- =~ i ]]; then
... interactive stuff ...
fi
Tyto řádky by měly předcházet řádkům, kde něco odesíláte/ozvete zpět.