我想知道是否有任何方法可以将创建的文件从 .sh 脚本重定向到特定目录没有直接从命令行修改脚本本身。
比方说:
我有一个脚本证明.sh在当前目录中创建一些文件:
cat prove.sh
#! /bin/bash
echo "try 1" > try.1.txt
echo "try 2" > try.2.txt
我想重定向那些创建的文件不是在当前目录中,但在另一个目录中(比方说~/Documents/prove/),直接来自我的:
sh prove.sh <...something to redirect files to directory...>
没有修改脚本本身。
你觉得可能吗?
有人有线索吗?
编辑:更具体地说,我需要做的是重定向在服务器上运行的程序的输出,并在指定目录中创建各种文件(不是标准输出)- 出去字段,到另一台计算机直接地(无需在程序运行的原始服务器中编写任何内容)。
我只有该服务器的主机访问权限,因此无法安装或 sudo 任何内容。由于程序运行的服务器中的防火墙我无法更改,因此侦听第二个服务器中的端口并将输出重定向到 nectat 中的此端口不起作用。
有什么想法吗?
答案1
假设脚本看起来与您所显示的完全一样:
#! /bin/bash
echo "try 1" > try.1.txt
echo "try 2" > try.2.txt
无论当前目录是什么,文件都会在当前目录中创建。
因此,要在 中创建文件~/Documents/prove/
,您可以执行以下操作
( cd ~/Documents/prove/ && bash /some/location/prove.sh )
其中/some/location/prove.sh
是脚本本身的路径名。
这将cd
首先到达给定的目录,如果进展顺利(该目录存在并且您有权访问该目录),bash
则将调用该脚本来运行该脚本,并且文件将在那里创建,假设您有权在该目录中创建文件目录。
我将命令放在( ... )
子 shell 中,这样就cd
不会影响原始工作目录。这意味着您应该发现自己位于执行该行后开始的同一目录中。
如果没有( ... )
,您将把目录更改为~/Documents/prove/
。