我想从 shell 脚本(更具体地说是 .zshrc)中检测它是否是通过 SSH 控制的。我尝试了 HOST 变量,但它始终是运行 shell 的计算机的名称。我可以访问来自 SSH 会话的主机名吗?比较两者将解决我的问题。
每次登录时都会出现一条消息,说明上次登录时间和主机:
Last login: Fri Mar 18 23:07:28 CET 2011 from max on pts/1
Last login: Fri Mar 18 23:11:56 2011 from max
Run Code Online (Sandbox Code Playgroud)
这意味着服务器具有此信息。
在我的拱安装,/etc/bash.bashrc以及/etc/skel/.bashrc包含这些行:
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
Run Code Online (Sandbox Code Playgroud)
在 Debian 上,/etc/bash.bashrc有:
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
Run Code Online (Sandbox Code Playgroud)
并且/etc/skel/.bashrc:
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
Run Code Online (Sandbox Code Playgroud)
man bash然而,根据,非交互式 shell 甚至不读取这些文件:
When bash is started non-interactively, to run a shell script, for
example, it looks for the variable …Run Code Online (Sandbox Code Playgroud) 我有一个目录,里面有几 GB 和几千个小文件。我想用 scp 在网络上复制它不止一次。源机器和目标机器上的 CPU 时间很便宜,但是单独复制每个文件所增加的网络开销是巨大的。我会将它 tar/gzip 并运送过来,但源计算机磁盘不足。
有没有办法tar -czf <output> <directory>将 scp的输出通过管道传输?如果没有,还有其他简单的解决方案吗?我的源机器很古老(SunOS),所以我不想在上面安装东西。
我正在尝试将文件从本地机器传输到远程机器。
当我scp不带-v选项使用时,它只提供以下输出:
.--. or '\033[0;1;33;93m.-\033[0;1;32;92m-.\033[0m'
Run Code Online (Sandbox Code Playgroud)
当我尝试scp使用-v选项时,我得到以下输出,似乎文件传输成功:
——
$ scp -v file.sh user@IP:/home/user/foo
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: network
debug1: Sending environment.
debug1: Sending env LC_PAPER = tr_TR.UTF-8
debug1: Sending env LC_ADDRESS = tr_TR.UTF-8
debug1: Sending env LC_MONETARY = tr_TR.UTF-8
debug1: Sending env LC_NUMERIC = tr_TR.UTF-8
debug1: Sending env LC_ALL = en_US.UTF-8
debug1: Sending env LC_TELEPHONE = tr_TR.UTF-8
debug1: Sending env LC_IDENTIFICATION = tr_TR.UTF-8 …Run Code Online (Sandbox Code Playgroud) 我scp来自远程主机的简单文件(实际上是本地运行的虚拟机,但这无关紧要)失败,没有显示任何错误消息,但显然没有复制所需的文件:
scp myuser@myhost:~/.bashrc ~/.bashrc.ubuntu
它唯一显示的是
================================================================================
我认为这很奇怪,因为这是我在遥控器上的登录问候语中显示的第一行,如下所示:
================================================================================
Welcome to <Ubuntu 12.04.2 LTS>
You are <myuser> logged into <hostname> (my_ipaddress)
Today is <Wed Aug 28 16:48:49 EDT 2013>
================================================================================
Run Code Online (Sandbox Code Playgroud)
以下.bashrc是定义该问候语的遥控器上的内容:
1 if [ -f ~/.bash_aliases ]; then
2 . ~/.bash_aliases
3 fi
4
5
6 export PS1='\w@\t>'
7
8 set -o vi
9
10 printf %80s |tr " " "="
11 echo
12
13 echo "Welcome to <"`lsb_release -d | sed 's/Description\:\s*//'`">"
14
15 export IPADDR=`hostname …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 scp 从网络中的另一台计算机复制一个小文件,该计算机运行的是 Linux Mint 18.3。
我从 macOS 尝试过,我得到了这个:
$ scp fyde@192.168.1.211:/home/fyde/Downloads/notes/ubuntu.txt .
fyde@192.168.1.211's password:
\033]4;0;#2b1229\033\\033]4;1;#FFD36D\033\\033]4;2;#6559B6\033\\033]4;3;#E1549E\033\\033]4;4;#788FA3\033\\033]4;5;#778BE1\033\\033]4;6;#D88AA7\033\\033]4;7;#d2d8d2\033\\033]4;8;#939793\033\\033]4;9;#FFD36D\033\\033]4;10;#6559B6\033\\033]4;11;#E1549E\033\\033]4;12;#788FA3\033\\033]4;13;#778BE1\033\\033]4;14;#D88AA7\033\\033]4;15;#d2d8d2\033\\033]10;#d2d8d2\033\\033]11;#2b1229\033\\033]12;#FFD36D\033\\033]13;#d2d8d2\033\\033[s\033[1000H\033[8m\033]708;#2b1229\033\\033[u\033]13;#d2d8d2\033\C0644 6743 ubuntu.txt
Run Code Online (Sandbox Code Playgroud)
我在 Ubuntu 机器上尝试过,但得到了类似的结果:
$ scp fyde@192.168.1.211:/home/fyde/Downloads/notes/ubuntu.txt .
fyde@192.168.1.211's password:
C0644 6743 ubuntu.txt
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的文件,得到了相同的结果,从其他计算机复制工作正常。
有谁知道发生了什么?