我想编写一个 shell 脚本,它将附加到一个命名的 tmux 会话,在该会话中选择一个窗口(或窗格)并在该选定的窗口(或窗格)中运行一个命令。
如何从 bash 脚本执行此操作?
我知道
tmux new-window -n:mywindow 'exec something'
Run Code Online (Sandbox Code Playgroud)
允许我向新创建的窗口发送命令,但我需要类似的东西
tmux select-window -t:0 'my command'
Run Code Online (Sandbox Code Playgroud)
我想我可以使用,send-keys但似乎应该有一些需要运行的命令或命令列表。
有没有一种聪明的方法来执行复制和移动操作或命令来复制文件,而不必在同一文件夹中执行cd, 然后mv在之后?
例如,我必须运行以下命令:
mv /folder1/folder2/folder3/file.txt /folder1/folder2/folder3/file-2013.txt
Run Code Online (Sandbox Code Playgroud)
请注意,我将文件移动到的目录是相同的,但我必须再次放置整个路径,有时会很烦人。我很想知道是否有另一种方法可以做到这一点而不必再次放置整个路径,因为操作将在同一路径中完成。
我试图找出一种简单的方法,无论出于何种原因(错误或其他原因),在命令完成时继续重新执行命令。
解决这个问题的最佳方法是什么?
编辑:我之前不够清楚。我需要下一次执行才能等到上一次执行完成。
编辑 2:几乎所有的答案都很好用。我错误地认为大多数答案要么分叉进程,要么只重新执行一次,这两种情况都不需要。
我已经对此进行了广泛的搜索,但似乎无法提出一个可行的示例。
我的目标是监视特定端口上的 TCP 流量以查看传入连接并将它们写入文本文件。问题是我还需要在每一行上都有一个时间戳,以准确显示客户端何时连接到第二行。
我已经用完了 netstat、nmap 和 tcptrack,但都不支持时间戳。
我在想,如果我监视特定的本地端口并在建立连接时将文本写入文件然后连接每一行上的日期,那么 linux shell 脚本可能会起作用。
我在玩这个:
netstat -ano|grep 443|grep ESTABLISHED
Run Code Online (Sandbox Code Playgroud)
还有这个:
tcptrack -i eth0 port 443
Run Code Online (Sandbox Code Playgroud)
但都不适合我的需求,因为我需要连接进来的时间。
如果您有任何建议或可以指出我正确的方向,将不胜感激。
谢谢。:)
我正在使用 tail -f 来监视正在积极写入的日志文件。当某个字符串被写入日志文件时,我想退出监控,并继续我的脚本的其余部分。
目前我正在使用:
tail -f logfile.log | grep -m 1 "Server Started"
Run Code Online (Sandbox Code Playgroud)
找到字符串后,grep 按预期退出,但我需要找到一种方法使 tail 命令也退出,以便脚本可以继续。
我正在通过 SSH 远程使用 GNU/Linux 系统。
我错误地在我的$HOME/.bash_profilescriot 中添加了一些导致错误的东西。(具体来说:我添加了一个exec foo命令而不是. foo, 应用于另一个没有执行权限的 bash 脚本,这会导致错误。)
现在我似乎无法通过 SSH、SCP 或 SFTP 进入我的机器:bash,我的登录 shell,尝试运行exec foo命令,得到错误并将我扔出去!我没有可以远程访问的任何其他帐户。
我可以做些什么来恢复对系统的访问?
额外细节:
长期读者,第一次提问。
我按照此答案中的说明进行操作:
如何通过 SSH 连接到“Windows 10 上的 Ubuntu 上的 Bash”?
我正在尝试在同一台机器上的 Windows 中从 PuTTY 进行 SSH。使用与我的配置文件匹配的端口 22。尝试了 127.0.0.1 和 127.0.1.1。但是,我仍然收到“拒绝访问”的消息:
最终我希望建立一个 Visual Studio 远程构建,但到目前为止我根本无法远程进入。我应该采取哪些后续步骤?
Process Hacker 为端口 22 显示了这一点(不确定这意味着什么):
以下是 /etc/ssh/sshd_config 的内容:
# Package generated configuration file
# See the sshd_config(5) manpage for details
# What ports, IPs and protocols we listen for
Port 22
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
# HostKeys for protocol version 2
HostKey …Run Code Online (Sandbox Code Playgroud) 多年来,在类 UNIX 系统上(与我最相关的是 Linux),我注意到.(当前目录)在$PATH默认情况下永远不会出现。为什么是这样?
我记得几年前读到这是一个安全问题,但我读过的文章并没有解释到底是什么问题。是不是因为有人可能会离开的恶意版本,ls或cp在一个目录下,我最终会不自觉地运行它呢?
我试图删除以 A 开头并以 2 个数字结尾的文件,但它没有做任何事情。
我试过的:
rm ^A*[0..9]2$
Run Code Online (Sandbox Code Playgroud)
我哪里错了?
在 bash 中,如果我想执行一个命令并且只显示匹配特定模式的输出行,我可以将其通过管道传输到grep,例如
文件测试文件
hello
there
my
friends
Run Code Online (Sandbox Code Playgroud)
命令
$ cat testfile | grep 'hello'
hello #this will be highlightd
Run Code Online (Sandbox Code Playgroud)
这将突出显示搜索匹配并显示它所在的整行。我可以使用-A和-B显示该行之前和之后的行。我的问题是是否可以执行命令并正常显示所有输出,但像 grep 一样突出显示搜索匹配项?所以我的输出将是
hello #highlighted
there
my
friends
Run Code Online (Sandbox Code Playgroud)