Linux 输出到脚本目录中的文件
这可能是非常基本的,但我花了一整天的时间来寻找答案,但没有取得多大成功 我有一个可执行脚本,它位于Linux 输出到脚本目录中的文件,linux,bash,shell,posix,Linux,Bash,Shell,Posix,这可能是非常基本的,但我花了一整天的时间来寻找答案,但没有取得多大成功 我有一个可执行脚本,它位于~/Desktop/shell/myScript.sh 我想要一个单行命令从我的终端运行这个脚本,它输出到脚本所在的同一目录中的一个新目录,而不管我当前的工作目录是什么 我使用的是: mkdir -p tmp && ./Desktop/shell/myScript.sh|grep '18x18'|cut -d":" -f1 > tmp/myList.txt 但它会在当前
~/Desktop/shell/myScript.sh
我想要一个单行命令从我的终端运行这个脚本,它输出到脚本所在的同一目录中的一个新目录,而不管我当前的工作目录是什么
我使用的是:
mkdir -p tmp &&
./Desktop/shell/myScript.sh|grep '18x18'|cut -d":" -f1 > tmp/myList.txt
但它会在当前工作目录中创建新目录,而不是在目标位置上
任何帮助都将不胜感激
谢谢 如果您预先定义了一个变量,您可以在一行中求解它:
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
参数以及输出文件名将作为命令行参数和选项传递给包装器。如果预先定义变量,可以在一行中解决:
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
参数以及输出文件名将作为命令行参数和选项传递给包装器。如果预先定义变量,可以在一行中解决:
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
参数以及输出文件名将作为命令行参数和选项传递给包装器。如果预先定义变量,可以在一行中解决:
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
参数以及输出文件名将作为命令行参数和选项传递给包装器。如何:
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
是一个好去处。考虑到你的脚本可能会出名,并由管理员在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
是一个好去处。考虑到你的脚本可能会出名,并由管理员在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
是一个好去处。考虑到你的脚本可能会出名,并由管理员在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
是一个好去处。考虑到你的脚本可能会出名,并由管理员在script_directory=`dirname $0`
cat "$0"|grep '18x18'|cut -d":" -f1 > "$script_directory"/tmp/myList.txt
上面的代码将找到脚本目录并将其保存在变量中
[2]在脚本目录中创建“tmp”文件夹
mkdir "$script_directory/tmp 2> /dev/null"
上面的代码将在脚本目录中创建一个名为“tmp”的目录。如果目录存在,mkdir将不会使用此命令行覆盖任何现有目录,并给出一个错误。我通过“2>/dev/null”隐藏所有错误
[3]打开脚本并使用“剪切”进行修改,然后将输出重定向到新文件
script_directory=`dirname $0`
cat "$0"|grep '18x18'|cut -d":" -f1 > "$script_directory"/tmp/myList.txt
您的脚本可以通过一些代码为您实现这一点 而不是从命令行手动执行此操作,谁知道您将在哪里移动脚本并将其放置。添加以下代码 [1]找到您的脚本di