Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 输出到脚本目录中的文件_Linux_Bash_Shell_Posix - Fatal编程技术网

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
是一个好去处。考虑到你的脚本可能会出名,并由管理员在中安装,同时由几个人运行。出于这个原因,试着思考。

您的脚本可以通过一些代码为您完成这项任务。

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

[1]使用dirname查找脚本目录位置

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