リモートシステムの.bashrcファイルに次のものが含まれていると、scpを介してファイルをコピーできません。源泉このコマンドはパスといくつかの変数を更新します。なぜこれが起こるのですか?
答え1
あなたの内容の一部または全部を含める必要があります。.bashrc
いいえシェルが非対話型の場合に実行します。 (Anは、scp
誰かがシステムを根本的に変更しない限り、非対話型シェル呼び出しの例です。)次に、出力を生成できるすべてのコマンドをファイルの適切なセクションに入れます。
initファイルでこれを行う標準的な方法は次のとおりです。
# Put all the commands here that should run regardless of whether
# this is an interactive or non-interactive shell.
# Example command:
umask 0027
# test if the prompt var is not set and also to prevent failures
# when `$PS1` is unset and `set -u` is used
if [ -z "${PS1:-}" ]; then
# prompt var is not set, so this is *not* an interactive shell
return
fi
# If we reach this line of code, then the prompt var is set, so
# this is an interactive shell.
# Put all the commands here that should run only if this is an
# interactive shell.
# Example command:
echo "Welcome, ${USER}. This is the ~/.bashrc file."
使用している人も見ることができます。
[ -z "${PS1:-}" ] && return
私のより長い声明よりif
。
ファイル全体を並べ替えたくない場合は、次のように特定の行をラップして対話型コンテキストでのみ実行できます。
if [ -n "${PS1:-}" ]; then
echo "This line only runs in interactive mode."
fi
このように分離すると、.bashrc
コマンドscp
でこの問題は発生しなくなります。
答え2
このソリューションは私にとっても効果的です。しかし、私のデフォルトのシェルはTCSHなので、次のように修正を少し変更する必要がありました(.tcshrc)。
if ( $?SSH_TTY ) then
exec /bin/bash
endif
皆の利益のために共有しなければならないと思いました。