当我使用"tab"键时bash
(当你开始输入文件名并希望它完成时),bash
正确地转义文件名,如果我使用那个"转义"文件名,它就可以了.
例如:
An-Beat - Mentally Insine (Original Mix).mp3
=> bash
使用"TAB"逃脱
之后An-Beat\ -\ Mentally\ Insine\ \(Original\ Mix\).mp3
我正在搜索一个函数bash
,它将以"tab"转义文件名的方式转义文件名.
我有一个脚本使用SCP从AWS上的远程Linux主机上提取文件.在每晚运行相同的代码大约6个月没有问题之后,它今天开始失败了protocol error: filename does not match request
.我在下面的一些更简单的文件名中重现了这个问题:
$ scp -i $IDENT $HOST_AND_DIR/"foobar" .
# the file is copied successfully
$ scp -i $IDENT $HOST_AND_DIR/"'foobar'" .
protocol error: filename does not match request
# used to work, i swear...
$ scp -i $IDENT $HOST_AND_DIR/"'foobarbaz'" .
scp: /home/user_redacted/foobarbaz: No such file or directory
# less surprising...
Run Code Online (Sandbox Code Playgroud)
我单引号的原因是我最初抓住了名字中带有空格的文件.为了处理空间,我已经做$HOST_AND_DIR/"'foo bar'"
了好几个月,但从今天开始,它只会接受$HOST_AND_DIR/"foo\ bar"
.所以,我的问题是固定的,但我仍然对正在发生的事情感到好奇.
我用Google搜索了错误信息,但我没有看到任何真实的提及,这让我感到惊讶.
所涉及的两个主机都有OpenSSL 1.0.2g
输出ssh -v localhost
,并bash --version
说GNU bash, version …
我现在正在尝试将整个目录从一个集群镜像复制到另一个集群。但是当名称中有空格时它会失败并且我无法弄清楚如何解决这个问题,因为似乎 scp 认为我正在复制多个文件。我正在使用一个变量来标记我需要的路径,因此通过添加反斜杠似乎不容易解决。
这是我正在使用的代码:
if ssh user@ip -i key test -d "'$current_dir'"; then
echo "Directory exists. Ready to copy $dir_name."
scp -i key -r "$current_dir/$dir_name" user@$ip:"$current_dir/$dir_name"
else
echo Directory doesn\'t exist. Making a new directory.
ssh user@$ip -i key mkdir "'$current_dir'"
scp -i key -r "$current_dir/$dir_name" user@$ip:"$current_dir/$dir_name"
fi
Run Code Online (Sandbox Code Playgroud)
我试过单引号、双引号和带双引号的单引号,但它们都不起作用。有人可以帮我解决吗?顺便说一句,代码中的 mkdir 语句有效。