输出到脚本目录中的文件

时间:2014-12-03 00:03:58

标签: linux bash shell posix

这可能非常基本,但我花了一整天时间找不到成功的答案。

我有一个驻留在~/Desktop/shell/myScript.sh

中的可执行脚本

我想要一个单行命令从我的终端运行这个脚本,该脚本输出到脚本所在的同一目录中的新目录,无论我目前的工作目录是什么。

我正在使用:

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

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

任何帮助都将不胜感激。

谢谢!

3 个答案:

答案 0 :(得分:1)

如果预先定义变量,可以在一行中解决:

export LOC=$HOME/Desktop/shell

然后你可以说

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

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

答案 1 :(得分:1)

这个怎么样:

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

答案 2 :(得分:1)

你的脚本可以用某些代码为你做这件事

而不是从命令行手动执行此操作,而不知道您将在何处移动脚本并将其放入。添加以下代码

[1]使用dirname

查找脚本目录位置
script_directory=`dirname $0`

上面的代码将找到您的脚本目录并将其保存在变量中。

[2]创建你的" tmp"脚本目录中的文件夹

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

上面的代码将创建一个名为" tmp"的目录。在您的脚本目录中。如果该目录存在,mkdir将不会使用此命令行覆盖任何现有目录并给出错误。我通过" 2>隐藏所有错误的/ dev / null的"

[3]打开您的脚本并使用" cut"进行修改。然后将输出重定向到新文件

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