Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.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_Optimization - Fatal编程技术网

使用Linux终端执行条件、创建文件、删除文件和其他操作 介绍

使用Linux终端执行条件、创建文件、删除文件和其他操作 介绍,linux,bash,shell,optimization,Linux,Bash,Shell,Optimization,不久前我试过Fedora,我喜欢左上角的工作方式,所以,当我回到Ubuntu时,我改变了它,使它以同样的方式工作 然后,我编写了一个小脚本(刚刚能够使它工作)来关闭右上角的活动窗口。这很危险,所以我决定更进一步,用几个“If语句”来实现它。因此,如果在X秒内触摸右上角两次,则不会关闭窗口。我意识到它是被触摸的,因为我还将其配置为按下,并且“按下控制键时显示指针位置”在系统设置>鼠标和触摸板中设置为true 代码 对于CompizConfig>Commands>Commands>Commands>

不久前我试过Fedora,我喜欢左上角的工作方式,所以,当我回到Ubuntu时,我改变了它,使它以同样的方式工作

然后,我编写了一个小脚本(刚刚能够使它工作)来关闭右上角的活动窗口。这很危险,所以我决定更进一步,用几个“If语句”来实现它。因此,如果在X秒内触摸右上角两次,则不会关闭窗口。我意识到它是被触摸的,因为我还将其配置为按下,并且“按下控制键时显示指针位置”在系统设置>鼠标和触摸板中设置为true

代码 对于CompizConfig>Commands>Commands>Commands>Command line 0(CompizConfig>Commands>Edge Bindings>Run Command 0为“右上方”),需要在1行中编写代码。工作代码如下:

xte 'key Control_L'; if [ -f /tmp/fcont ]; then rm -f -r /tmp/fcont; else touch /tmp/fcont; sleep 1; if [ -f /tmp/fcont ]; then xte 'keydown Alt_L' 'key F4' 'keyup Alt_L'; rm -f -r /tmp/fcont; fi fi
然后我对其进行了扩展,并对其进行了评论,以使其更具可读性:

xte 'key Control_L';    #Set to "Show position of pointer"
if [ -f ~/.fcont ]; #If file exists
    then
    rm -f -r ~/.fcont   #Delete it   

else
    touch ~/.fcont; #Else, create it
    sleep 1;
    #If it STILL exists (it doesn't if this is executed twice in X seconds)
    if [ -f ~/.fcont ];
        then
        xte 'keydown Alt_L' 'key F4' 'keyup Alt_L'; #Close active window
        rm -f -r ~/.fcont;  #Remove the file
        fi;
    fi
实际问题 因此,代码是完美的工作。但是考虑到性能,创建和删除文件可能不够快。然后,您能推荐一种使用变量而不是文件的方法吗?(如果您能实现它,那就太好了!)。虽然它与操作系统无关,但我正在寻找php中$_SESSION['name']的行为(如果存在的话)。显然,每次执行都处于不同的过程中

此外,如果您对此有任何其他反馈,我们将不胜感激。如果你喜欢就用它

额外信息


首先,何必麻烦呢?你说“可能不够快”,但实际上,它不够快吗?运行脚本时,您观察到了什么?“足够快”是一个相对的术语,我敢打赌这一切都发生在不到3秒的时间里

无论如何,要回答你问的问题

看起来您正在并行运行同一个脚本多次(可能)?如果是这种情况,那么变量将不会帮助您,因为它们不是在进程之间共享的。您可以使用命名管道、共享内存或发送信号(杀死)脚本的现有实例来设置一些可怕的复杂系统,但您所采用的方法似乎简单而安全


一件事:你可能想考虑将文件放入/tMP:所有文件/tMP只存储在RAM中(在许多Linux DistROS中),因此读写它们可能更快。实际上,所有磁盘都缓存在RAM中,所以这可能没有什么区别。如果~/是网络磁盘,那么RAM缓存通常会在20秒左右过期,在这种情况下,使用本地文件肯定是一种胜利。

首先,何必费心呢?你说“可能不够快”,但实际上,它不够快吗?运行脚本时,您观察到了什么?“足够快”是一个相对的术语,我敢打赌这一切都发生在不到3秒的时间里

无论如何,要回答你问的问题

看起来您正在并行运行同一个脚本多次(可能)?如果是这种情况,那么变量将不会帮助您,因为它们不是在进程之间共享的。您可以使用命名管道、共享内存或发送信号(杀死)脚本的现有实例来设置一些可怕的复杂系统,但您所采用的方法似乎简单而安全


一件事:你可能想考虑将文件放入/tMP:所有文件/tMP只存储在RAM中(在许多Linux DistROS中),因此读写它们可能更快。实际上,所有磁盘都缓存在RAM中,所以这可能没有什么区别。如果~/是网络磁盘,则RAM缓存通常在20秒左右后过期,在这种情况下,使用本地文件肯定是成功的。

您可能不会对/tmp所支持的内容做出任何假设。虽然在Solaris上它确实是(曾经?)一个tmpfs,但这在大多数当代Linux系统中并不成立,例如,在大多数Linux系统中,磁盘经常在它后面。然而,OP特别提到Ubuntu,现在我检查一下,它似乎没有在/tmp中使用tmpfs。但是/tmp将永远不会是网络驱动器,所以总体来说还是更好。不管怎样,就像我说的,我不相信无论你做什么都能得到什么。很好的回答,我已经看过管道了,是的,它们看起来很吓人。现在我肯定知道了。3秒钟只是一个例子。现在我把它缩短到了1秒(它也可以工作),如果xte没有bug(显然),我会把它缩短到500ms。将文件移动到/tmp的建议是一个非常好的额外建议。非常感谢。您不必对/tmp的支持内容进行任何假设。虽然在Solaris上它确实是(曾经?)一个tmpfs,但这在大多数当代Linux系统中并不成立,例如,在大多数Linux系统中,磁盘经常在它后面。然而,OP特别提到Ubuntu,现在我检查一下,它似乎没有在/tmp中使用tmpfs。但是/tmp将永远不会是网络驱动器,所以总体来说还是更好。不管怎样,就像我说的,我不相信无论你做什么都能得到什么。很好的回答,我已经看过管道了,是的,它们看起来很吓人。现在我肯定知道了。3秒钟只是一个例子。现在我把它缩短到了1秒(它也可以工作),如果xte没有bug(显然),我会把它缩短到500ms。将文件移动到/tmp的建议是一个非常好的额外建议。非常感谢你。