简单脚本 - 对选定文件执行命令

简单脚本 - 对选定文件执行命令

我想编写一个脚本,用于在选定文件上执行 .jar 文件。稍后我将通过 Nautilus Actions 工具将该脚本添加到右键菜单中,或者直接将其放入 nautilus-scripts 文件夹中。我在创建脚本时遇到了问题。

当我在通常的控制台屏幕中并想在任何其他文件上执行此 jar 文件时,我使用以下语法

myfile.jar ./someotherfile.xml

并且 jar 文件会将输出写入控制台屏幕。

所以我创建了一个文件 script.sh,在里面添加了几行

#!/bin/bash
/home/username/myfile.jar $1

但它没有输出任何内容。我知道我做错了。请帮忙。

合计,我需要一个使用选定文件作为参数的脚本,打开 gnome-terminal,在该终端内它将启动 JAR 文件并将选定的文件传递给它。

我确信这是一个非常简单的过程,但我对 shell 脚本完全是新手。

答案1

你也可以选择

!/bin/sh
gnome-terminal -x java -jar /home/askmoo/myfile.jar "$1"

首先打开 gnome 终端,然后在其中执行您的 java 应用程序。这样,您就可以将输出打印到终端。

答案2

在 Gnome、KDE ​​和其他系统中,桌面和文件夹中的可执行文件(和图标)总是会弹出“右键单击属性”窗口。我不确定如何使用 nautilus 操作扩展来实现这一点,但您始终可以强制终端在命令退出后挂起,如下所示:

$ cat > /usr/local/bin/har.sh
#!/bin/sh
java -jar /home/jaroslav/tmp/src/hat/bin/hat.jar
while true;do  
read  -p "finished reading? " quit; 
[[ "$quit" == "yes" ]] && exit
done 

$ chmod 755 /usr/local/bin/hat.sh
$ hat.sh

Usage:  hat [-stack=<bool>] [-refs=<bool>] [-port=<port>] [-baseline=<file> -debug=<int>] [-version] <file>

        -stack false:     Turn off tracking object allocatoin call stack.
        -refs false:      Turn off tracking of references to objects
        -port <port>:     Set the port for the HTTP server.  Defaults to 7000
        -exclude <file>:  Specify a file that lists data members that should
                          be excluded from the reachableFrom query.
        -baseline <file>: Specify a baseline object dump.  Objects in
                          both heap dumps with the same ID and same class will
                          be marked as not being "new".
        -debug <int>:     Set debug level.
                            0:  No debug output
                            1:  Debug hprof file parsing
        -version          Report version number
        -donationware     Give information on the status of HAT
        <file>            The file to read

For a JDK 1.2 (or better) dump file, you may specify which dump in the file
by appending "#<number>" to the file name, i.e. "foo.hprof#3".

All boolean options default to "true"

finished reading? no
finished reading? ^C
$

按 CTRL+C 退出终端(或输入 yes)

还有属性对话框:..好的,我刚刚查看了 nautilus 属性...没有运气(我讨厌 gnome,他们让它变得越来越愚蠢)

它在 KDE 中仍然可用:(但 id 很快就会使用无限 while 循环),导航到这些设置所需的框数量实在是太多了。
哦天啊这么多盒子

答案3

./myfile.jarmyfile.jar是两个不同的命令。第一个命令执行当前目录中的文件(假设设置了执行位),后者搜索$PATH名为 的程序myfile.jar

如果$PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games,则按顺序搜索:

/usr/local/sbin/myfile.jar
/usr/local/bin/myfile.jar
/usr/sbin/myfile.jar
/usr/bin/myfile.jar
/sbin/myfile.jar
/bin/myfile.jar
/usr/games/myfile.jar

我怀疑你的 jar 文件是否真的是可执行文件,如果它是 Java ARchive,你的 shellscript 应该是:

#!/bin/sh
java -jar /home/askmoo/myfile.jar "$1"

相关内容