小编Mia*_*ati的帖子

管道 bash 字符串操作

我读过一些其他管道 bash 字符串操作问题,但它们似乎是专门的应用程序。

本质上,有没有办法让下面的事情更简单?

代替

$ string='hello world'; string2="${string// /_}"; echo "${string2^^}"
HELLO_WORLD
Run Code Online (Sandbox Code Playgroud)

就像是

$ echo 'hello world' | $"{-// /_}" | "${ -^^}"
HELLO_WORLD
Run Code Online (Sandbox Code Playgroud)

编辑 如果可能的话,我有兴趣保持在 bash 操作中以保持速度(而不是 sed/awk,它们倾向于大大减慢我的脚本速度)

编辑2:@jimmij

我喜欢第二个例子并引导我创建一个函数。

bash_m() { { read x; echo "${x// /_}"; } | { read x; echo "${x^^}"; }; }
echo hello world | bash_m
HELLO_WORLD
Run Code Online (Sandbox Code Playgroud)

bash string variable-substitution

12
推荐指数
2
解决办法
1万
查看次数

rsync 到多个远程服务器

我有一个文件要发送到多个单独的服务器。是否可以命名多个目的地?

rsync foo.png server1:foo.png server2:foo.png
Run Code Online (Sandbox Code Playgroud)

这给了我一个“意外的远程 arg:server1:foo.png

rsync

12
推荐指数
2
解决办法
2万
查看次数

转发 X11 不起作用 - 错误:无法打开显示:本地主机:11.0

LM 17 Xfce OpenSSH_6.6.1p1 Ubuntu-2ubuntu2

尽管到处都在谷歌搜索,但我似乎无法让它发挥作用。我不断收到此错误。

$ xlogo
Error: Can't open display: localhost:10.0
Run Code Online (Sandbox Code Playgroud)

我已经尝试了两种类型的连接来转发 x11 与调试和 sshd 的正常实例

ssh -Y remotehost -p 2500  
ssh -X remotehost -p 2500 
Run Code Online (Sandbox Code Playgroud)

服务器配置允许 x11 转发。
在调试中使用新的 sshd 实例进行测试时,我在连接时看到了这一点。我可以告诉调试的唯一相关部分:

debug1: channel 1: new [X11 inet listener]
debug1: channel 2: new [X11 inet listener]  
Run Code Online (Sandbox Code Playgroud)

显示已设置

$ echo $DISPLAY
localhost:10.0
Run Code Online (Sandbox Code Playgroud)

用户是具有 sudo 访问权限的标准用户,否则我没有问题(一切都是 cli 工作正常。)

此外,我没有使用多路复用连接,
当我连接到自己时可以使用 x11 转发 (ssh -X 127.0.0.1)。
当错误出现时,在连接时使用 ssh -v 不会提供任何更有用的反馈。
如果我错过了任何我可以尝试的东西,请告诉我。我难住了。

编辑:

$ netstat -l | grep 6010

tcp        0      0 …
Run Code Online (Sandbox Code Playgroud)

ssh x11 sshd

5
推荐指数
1
解决办法
4万
查看次数

Bash 支撑扩展和变量

我有一个查找命令:

find Directory/{Alpha,Bravo,Charlie} arg1 arg2
Run Code Online (Sandbox Code Playgroud)

我想替换Alpha,Bravo,Charlie$find_dir

find Directory/{$find_dir} arg1 arg2
Run Code Online (Sandbox Code Playgroud)

然而后者扩展到

find Directory/{Alpha,Bravo,Charlie} arg1 arg2
Run Code Online (Sandbox Code Playgroud)

而不是

find Directory/Alpha Directory/Bravo Directory/Charlie arg1 arg2
Run Code Online (Sandbox Code Playgroud)

为什么?它是相当复杂的 bash 脚本的一部分,该脚本可能有或多或少的目录,并非所有目录都是相关的(因此 globbing Upload/* 不起作用)。所以如果我现在设置三个并添加另一个,我将不得不在以后手动添加它。另外,我需要它从目录的根目录运行以保持查找输出的角度(./Upload/Dir/file 而不是 ./Dir/file)。

但是使用变量将允许我根据需要更改它并使其与脚本的其他部分相关。

bash brace-expansion variable-substitution

2
推荐指数
1
解决办法
2306
查看次数

标签 统计

bash ×2

variable-substitution ×2

brace-expansion ×1

rsync ×1

ssh ×1

sshd ×1

string ×1

x11 ×1