这可能非常基本,但我花了一整天时间找不到成功的答案。
我有一个驻留在~/Desktop/shell/myScript.sh
我想要一个单行命令从我的终端运行这个脚本,该脚本输出到脚本所在的同一目录中的新目录,无论我目前的工作目录是什么。
我正在使用:
mkdir -p tmp &&
./Desktop/shell/myScript.sh|grep '18x18'|cut -d":" -f1 > tmp/myList.txt
但它会在当前工作目录中创建新目录,而不是在目标位置。
任何帮助都将不胜感激。
谢谢!
答案 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
以便创建目录并重定向输出可能会更好。 grep
和cut
参数以及输出文件名将作为命令行参数和选项传递给包装器。
答案 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