输出到脚本目录中的文件

问题描述:

这可能很基本,但我花了整整一天找到一个没有太多成功的答案。输出到脚本目录中的文件

我必须驻留在~/Desktop/shell/myScript.sh

我想单行命令来运行从我的终端这个脚本输出到同一个目录中的新目录,脚本所在不管我现在的工作可执行脚本目录是。

我所用:

mkdir -p tmp && 
    ./Desktop/shell/myScript.sh|grep '18x18'|cut -d":" -f1 > tmp/myList.txt 

但它会在当前工作目录中新的目录,而不是在目标位置。

任何帮助,将不胜感激。

谢谢!

+2

没有修改如何运行'mkdir -p tmp && someScript'并让'somescript'影响目录的创建位置。你可以重写脚本,以便你可以运行'somescript tmp/myList.txt',并让脚本[查找它的目录](http://stackoverflow.com/questions/59895/can-a-bash-script-告诉什么目录存储在)并写入文件。 – 2014-12-03 00:15:23

+0

感谢您的回复。让我们忽略mkdir部分,只输出脚本目录而不是当前的工作目录,我的选择是什么? – 2014-12-03 00:24:24

+0

同样没有办法运行'somescript> tmp/myList.txt'并让'somescript'影响写入文件的位置。如前所述,您可以重写脚本,以便运行'somescript tmp/myList.txt',然后将例如'echo my text>“/ my/dir/$ 1”'写入'/ my/dir/tmp/myList.txt' – 2014-12-03 00:31:52

你可以解决它在一个行,如果你预先定义的变量:

export LOC=$HOME/Desktop/shell 

那么你可以说

mkdir -p $LOC/tmp && $LOC/myScript.sh | grep '18x18' | cut -d":" -f1 > $LOC/tmp/myList.txt 

但是,如果你这样做反复它可能是更好的长期-term包装myScript.sh,以便它创建目录并为您重定向输出。参数grepcut以及输出文件名将作为命令行参数和选项传递给包装器。

如何:

SCRIPTDIR="./Desktop/shell/" ; mkdir "$SCRIPTDIR/tmp" ; "$SCRIPTDIR/myScript.sh" | grep '18x18' | cut -d ":" -f 1 > "$SCRIPTDIR/tmp/myList.txt" 

在你的情况,你必须给脚本路径反正。如果您将脚本放在自动搜索的路径中,例如$HOME/bin,你可以输入myScript.sh而不用目录前缀,你可以使用SCRIPTDIR=$(dirname $(which myScript.sh))

将目录与二进制文件和数据文件混合通常是一个坏主意。对于临时文件/tmp是去的地方。请考虑您的脚本可能会成名并由管理员在/usr/bin中安装,并由多人同时运行。出于这个原因,试着想想mktemp

脚本可以为你做这个带的一些代码

而是通过命令行手工做这个的,谁知道在那里你会移动你的脚本,并把它。使用目录名

script_directory=`dirname $0` 

上面的代码会发现你的脚本目录,并将它保存在一个变量中添加以下代码

[1]寻找你的脚本目录位置。

[2]在您的脚本目录

mkdir "$script_directory/tmp 2> /dev/null" 

上面的代码会让你的脚本目录下名为“TMP”目录下创建“TMP”的文件夹。如果该目录存在,mkdir将不会使用此命令行覆盖任何现有目录并发出错误。我用“2>的/ dev/null的”隐藏所有错误

[3]打开你的脚本,并使用“剪切”,然后将输出重定向到一个新的文件

cat "$0"|grep '18x18'|cut -d":" -f1 > "$script_directory"/tmp/myList.txt