我经常需要登录到几台服务器中的一台并转到这些机器上的几个目录中的一个.目前我做了这样的事情:
localhost ~]$ ssh somehost Welcome to somehost! somehost ~]$ cd /some/directory/somewhere/named/Foo somehost Foo]$
我有脚本可以确定我需要进入哪个主机和哪个目录,但我无法找到一种方法来做到这一点:
localhost ~]$ go_to_dir Foo Welcome to somehost! somehost Foo]$
有一个简单,聪明或任何方式来做到这一点?
我试图找到一个在远程主机上拖尾文件的好方法.这是在Linux机器的内部网络上.要求是:
必须表现良好(没有额外的过程,或继续输出)
不能要求某人的宠物Perl模块.
可以通过Perl调用.
如果可能,在远程计算机上不需要自定义构建的脚本或实用程序(常规的linux实用程序很好)
我尝试过的解决方案通常都属于这种类型
ssh remotemachine -f <some command>
Run Code Online (Sandbox Code Playgroud)
"一些命令"已经:
tail -f logfile
Run Code Online (Sandbox Code Playgroud)
基本尾部不起作用,因为远程进程在本地ssh进程终止后继续将输出写入终端.
$socket = IO:Socket::INET->new(...);
$pid = fork();
if(!$pid)
{
exec("ssh $host -f '<script which connects to socket and writes>'");
exit;
}
$client = $socket->accept;
while(<$client>)
{
print $_;
}
Run Code Online (Sandbox Code Playgroud)
这样做效果更好,因为在本地进程退出后没有输出到屏幕但远程进程没有发现它的套接字已关闭并且它无限期地存在.
我想使用一个文件存储一个客户软件的当前版本号,启动脚本可以使用该文件在正确的目录中运行二进制文件.
例如,如果运行目录如下所示:
.
..
1.2.1
1.2.2
1.3.0
run.sh
current_version
Run Code Online (Sandbox Code Playgroud)
而且current_version包含:
1.2.2
Run Code Online (Sandbox Code Playgroud)
我想run.sh进入1.2.2并运行程序foo.
目前的解决方案是:
#!/bin/sh
version = `cat current_version`
cd $version
./foo
Run Code Online (Sandbox Code Playgroud)
它工作但不是很强大.它不检查文件是否存在,无法处理多行,前导空格,注释行,空白文件等.
使用shell或perl脚本执行此操作的最可行方法是什么?