Scp

當遠端機器的 .bashrc 包含源命令時執行 scp

  • September 13, 2019

當遠端機器 .bashrc 文件包含更新路徑和一些變數的源命令時,我無法通過 scp 複製文件。為什麼會這樣?

當你的 shell 是非互動式的時,你應該讓你的部分或全部.bashrc 不執行。(Anscp是非互動式 shell 呼叫的一個範例,除非有人從根本上改變了您的系統。)然後將所有可能生成輸出的命令放在文件的該部分中。

在 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
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命令應該不再有這個問題。

引用自:https://unix.stackexchange.com/questions/154395