Tag: bash

记录在Bash中执行的命令

有时候,我们需要记录在Bash shell中终端上运行的命令。 这是通过启动脚本解决的,主要包含以下内容: #!/bin/bash SESSION_LAST_COMMAND= log_last_command() { local command command=$(history 1 | sed -e “s/^[ ]*[0-9]*[ ]*//”) if [[ -n “$SESSION_LAST_COMMAND” ]]; then logger -p local3.notice “shell user [$$]: Executed command: $command” fi SESSION_LAST_COMMAND=”$command” } export PROMPT_COMMAND=log_last_command 它工作正常,只是按ENTER键再次记录最后一个命令。 这种情况会在按下回车键的情况下发生多次。 有些用户确实有这个习惯! 有没有办法避免这些额外的日志? 此外,解决方案的一个明显期望是,只需按几次输入并实际重新运行命令就可以区分。

如何在Ubuntu终端获取程序的位置?

如何在Ubuntu中获取程序的位置? 例如我有Oracle ,如何获取Oracle的文件夹racine(location)?

如何确定文件的MIME类型?

我最近切换到GNOME 3,并惊讶地发现我们无法设置默认应用程序。 我正在使用Bash编写Nautilus扩展。 我想找到一个文件的MIME类型。 最初我曾经使用sed提取文件的扩展名并在其上构建代码。 然后我意识到这个命令叫做file 。 当我尝试找到file –mime-type -b 的mkv文件时,命令file –mime-type -b 输出application/octet-stream但是当我看到Nautilus属性窗口时,它显示正确的video/x-matroska MIME类型。 我在这里遗漏了什么? 如果没有更好的方式我可以提交mime类型的文件?

创建最近创建的文件的目录

在我所拥有的系统上,文件通过一系列不同的机制上传到一个中央“传入”目录中。 每天处理一次这些文件,然后将它们移到需要的位置(这里的逻辑不相关)。 它们最终位于/files/的子目录中。 我想一个简单的(虽然在我的具体情况下不准确)是说以“a”开头的文件被移动到/files/a/afile 。 所以我在/files/有一堆子目录。 这很棒,对我有用。 然而,客户刚刚告诉我,如果有一个“最近添加”的目录,过去一周的文件可用,那就太好了。 我的第一个想法是创建一个名为/recent-files/的目录,并在将文件移出/incoming/后扩展文件处理脚本以执行以下操作: 删除/recent-files/所有文件 扫描/files/一周内创建的任何文件(非目录) 为每个真实路径创建符号链接并将其粘贴到/recent-files/ 听起来它会起作用,但是在算术和文件创建日期方面我的bash仍然很弱。 任何人都可以借给我一个手工制作一个find … -exec …声明近似于第二部分和第三部分? 当然,如果还有另一种创建命令行和NFS可见“搜索目录”的方法,请告诉我。

创建指向目录的符号链接

我有一个目录,我想创建一个符号链接。 我使用的命令是: cd workspace_b4a cd android-sdk-linux ln -sv build-tools/20.0.0/lib/ platform-tools/lib 输出是: ‘platform-tools/lib’ -> ‘build-tools/20.0.0/lib/’ 但是,Nautilus说platform-tools/lib是一个断开的链接, ls -l platform-tools/lib platform-tools/lib以红色显示build-tools/20.0.0/lib/和platform-tools/lib 。 我究竟做错了什么?

我可以在bash脚本中使用分数/小数吗?

在bash脚本中使用分数或小数时是否需要使用某种语法? 我尝试使用以下脚本(在Ubuntu 12.04中): #!/bin/bash { n=9 echo “$n” for (( i=.5; $i <10; i++ )); do let "c=$i+1" echo $i "+" $c done } 这适用于i=1 ,但是当我输入.5时会产生语法错误。

使用for循环在shell脚本的对话框中创建灵活的单选列表

我想用Dialog创建一个小程序来播放用Script创建的日志文件。 问题是我无法获得一个动态的无线电列表,如果创建了新的日志文件,它会自动添加一行。 所以我知道我“只是”需要使用一个if循环,比如# for i in …etc. 使用计数器来计算日志文件,但我无法使其工作。 所以这就是我现在所拥有的: #!/bin/bash COUNTER=1 for i in $( ls /mnt/home/$USER/shell_logs/*.log); do echo $i $COUNTER let COUNTER=COUNTER+1 done 我只需要与我的radiolist一起工作: #! /bin/bash COUNTER=1 for i in $( ls /mnt/home/$USER/shell_logs/*.log); do let COUNTER=COUNTER+1 done dialog –backtitle “Radiolist” \ –radiolist “test” 0 0 $COUNTER \ $COUNTER $i <– This is the main […]

Bash shell for循环过程有两个配对的变量名

例如,使用bash shell批量重命名大量文件是很常见的。 通常我使用以下结构, for file in ./*.short do # do command done 那是带有.short扩展名的文件名。 但是,现在如何在命令中处理两个或多个变量名(在本例中为文件扩展名)? 我想为以下命令进行批量处理, ( x2x +sf < data.short | frame -l 400 -p 80 | \ bcut +f -l 400 -s 65 -e 65 |\ window -l 400 -L 512 | spec -l 512 |\ glogsp -l 512 -x 8 -p 2 ;\ […]

Ubuntu添加路径/环境变量

我想在Ubuntu 12.04 lts中安装apache maven 3。 我做的是打开终端然后我输入以下命令 导出M2_HOME = / usr / local / apache-maven / apache-maven-3.0.5 [然后按Enter键] 导出M2 = $ M2_HOME / bin [然后按Enter键] export PATH = $ M2:$ PATH [Then press Enter] 之后我输入了 mvn –version 它显示了所有必要的信息,但在关闭终端后,我又输入了命令mvn –version 然后它说’mvn’不被认可 The program ‘mvn’ can be found in the following packages: * maven * maven2 Try sudo […]

按创建日期对目录中的文件进行排序(出生)

在我的下载文件夹中我有很多文件。我首先需要一种方法来安排它们按类型排列的类型第二个文件变成我添加的类型(或者可以说下载或出生(如果我没有错))他们到我的下载文件夹。 请看一下这里输入的链接说明在我的下载目录中我有pdf,zip等等,当我进入我的下载目录时首先我想看到我的tar.gz在一起(按类型排列)第二我需要我的焦油。 gz文件有点时间我添加到这个目录。例如我正在寻找第五个最年轻的出生时间tar.gz文件。