我想使用 mktemp 在远程机器上创建一个临时文件夹,然后将远程机器上的某些文件移动到该目录。
我尝试了以下操作:
ssh "$target" "mv $HOME/scripts/* $(mktemp -d -t scripts.XXXXXX)"
但是远程机器报错,提示没有创建这样的文件。有什么解决办法吗?
我想使用 mktemp 在远程机器上创建一个临时文件夹,然后将远程机器上的某些文件移动到该目录。
我尝试了以下操作:
ssh "$target" "mv $HOME/scripts/* $(mktemp -d -t scripts.XXXXXX)"
但是远程机器报错,提示没有创建这样的文件。有什么解决办法吗?
在:
在双引号内的是
mv $HOME...
,并且在双引号内,执行参数扩展和命令替换,因此这些$HOME
和将由本地$(...)
shell扩展,而不是远程shell。您需要在该 shell 代码周围加上单引号,以便将其逐字传递到远程 shell,并且您需要在将文件移动到那里之前检查 tmpdir 是否已创建:
这假设远程用户的登录 shell
$target
类似于 POSIX。如果您不能保证这一点,但现在
ssh
远程主机上的服务器LC_*
像许多服务器一样接受环境变量,您可以执行以下操作:运行:
这是大多数 shell(无论如何都是所有常见的 shell)能够理解的语法,并且运行
sh
,告诉它评估环境变量中的代码$LC_CODE
。或者你可以这样做:
代码
sh
通过其标准输入远程传递到运行。我们将mv
的标准输入重定向到/dev/null
,因为mv
在某些情况下会提示用户,我们不希望它从我们输入代码的管道读取答案。