Scp
當遠端機器的 .bashrc 包含源命令時執行 scp
當遠端機器 .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
命令應該不再有這個問題。