标签: bash

用 Java 启动 Shell 脚本并在退出时销毁所有进程

我需要一些特殊的设置来控制 LED 墙。可悲的是,我无法真正改变我使用的编程语言。我的设置如下所示:

处理(一些疯狂的 java fork ......)草图在启动过程后开始。处理草图扫描文件夹中的子文件夹(可以启动和控制 LED 墙的其他草图)并启动 Web 服务器。服务器呈现一个包含所有扫描文件夹的列表。单击“Webserver”通过 ProcessBuilder 启动选定的 Sketch。处理草图如下所示:

import http.*;
import java.util.*;
import java.lang.*;

SimpleHTTPServer server;
String prog = "";
int ExitValue = 1;
ProcessBuilder preparedsketch;
Process runningsketch;

void setup() {
  SimpleHTTPServer.useIndexHtml = false;
  server = new SimpleHTTPServer(this);
  TemplateFileHandler templateHandler = new ResultFiles("index.ftl");
  server.createContext("", templateHandler);
}


class ResultFiles extends TemplateFileHandler {
  public ResultFiles(String templateFileName) {
    super(templateFileName);
  }
  void createMap() {
    Map<String, String> params = queryToMap();
    if (params.containsKey("prog")) {
      if (params.get("prog").equals(prog)) {
        println("Has not changed"); …
Run Code Online (Sandbox Code Playgroud)

linux bash shell processing

5
推荐指数
1
解决办法
783
查看次数

在 Bash 的 /dev/tcp 中使用 SSL

我刚刚用 bash 写了一个 IRC 机器人(我知道,我知道)。它可以完成我需要的一切(SASL 身份验证、解析链接等),只是它不通过 SSL 进行连接。在 IRC 上进行了大量的谷歌搜索和大量的麻烦之后,我还没有找到一种让 /dev/tcp 使用 SSL 的方法。这是我当前的代码:

#!/bin/bash

if [[ "$1" == "-debug" ]]; then
    set -x
fi

irc_send() {
    printf ">>> %s\n" "$1"
    printf "%s\r\n" "$1" >&3 &
}

sasl_successful() {
    while read -ru3 line; do
        printf "%s\n" "$line"
        read -r location numeric rest <<< "$line"

        if [[ "$numeric" == "903" ]]; then
            return 0
        elif [[ "$numeric" == "904" || "$numeric" == "906" ]]; then
            return 1
        fi
    done
}

sasl_connect() …
Run Code Online (Sandbox Code Playgroud)

bash ssl tcp

5
推荐指数
1
解决办法
954
查看次数

Svn PRE-COMMIT Hook 扫描 java 类内容

我第一次做这样的钩子..

我需要一个预提交钩子来扫描所有要提交的 Java 类,它应该检查类中是否存在某些字符,如果发现其中的一些字符,例如 † 或 ¥ 等字符,则应避免提交,我认为进行这种动态更改的好方法可以将所有这些无效字符放入计划文件中,以便在我们需要时轻松更改它...

我从很久以前写的一个简单的钩子开始..

现在最大的问题是获取工作副本文件的位置。我应该扫描内容。

我尝试了很多 svnlook 命令,但我真的无法将这些信息捕获到预提交钩子中......

获取大量信息,但没有获取文件的本地路径。我正在使用它来扫描内容...

 OUTPUT="$($SVNLOOK changed -t $TXN $REPOS)"
 echo $SVNLOOK changed -t $TXN $REPOS 1>&2
 echo "$BASEDIR" 1>&2
 echo "${OUTPUT}" 1>&2
 echo "$TXN $REPOS" 1>&2  
Run Code Online (Sandbox Code Playgroud)

也许是我的方法不对?

非常感谢!

更新

感谢“CaffeineAddiction”,当你第一次做某事时,你知道这总是一个“大问题”。

实际上,最终真正的问题是,经过一天的尝试后,另一个与客户端字符编码相关的SVN Bug:

 Error output could not be translated from the native locale to UTF-8
Run Code Online (Sandbox Code Playgroud)

现在最后一个问题也解决了,脚本也能正常工作,你可以在下面看到它,它只需要美化,顺便感谢你,我会从你那里得到一些想法:

 REPOS="$1"
 TXN="$2"

 SVNLOOK=/usr/bin/svnlook

 OUTPUT="$($SVNLOOK changed -t $TXN $REPOS | awk '{print $2}')"

 for LINE in $OUTPUT
 do
   FILE=`echo $LINE`
   MESSAGE=`$SVNLOOK cat -t "$TXN" "$REPOS" "${FILE}"` …
Run Code Online (Sandbox Code Playgroud)

java unix svn bash svn-hooks

5
推荐指数
1
解决办法
590
查看次数

如何将命令嵌入到作为内置的 bash 中?

我使用 C 编程语言创建了一个命令行实用程序。现在我想将该命令嵌入到 bash 中。它应该作为 bash 内置命令 'cd'。我怎样才能做到这一点??

在 bash 源代码中,我看到有一个名为builtins. 我查看了那个目录,发现有*.def文件,有一个名为cd.def.

我认为这是 bash built-in 的定义cd。现在我的问题是如何创建我自己的定义???

c bash

5
推荐指数
1
解决办法
302
查看次数

向上舍入 bc 比例而不是使用比例或 printf 向下舍入

我使用 bc 和 scale 来评估表达式,但是我希望它向上舍入而不是向下舍入。什么是最简单的方法来做到这一点?

$ read exp
5+50*3/20 + (19*2)/7
$ echo "scale=3; $exp" | bc -l
17.928
Run Code Online (Sandbox Code Playgroud)

然而我想要的答案是 17.929

我更喜欢将答案作为我的答案的附录,而不是一些不同的东西。谢谢

以下是我尝试过的一些事情:

$ echo "scale=4; ($exp+0.0005)" | bc -l
17.9290
$ echo "scale=3; ($exp+0.0005)" | bc -l
17.9285
Run Code Online (Sandbox Code Playgroud)

但是我想17.929作为最后没有零的答案。

bash shell expression sh bc

5
推荐指数
1
解决办法
2199
查看次数

在 bash 中用其内容替换“源文件”并扩展变量

在 script.sh 中,

source a.sh
source b.sh

CMD1
CMD2
CMD3
Run Code Online (Sandbox Code Playgroud)

如何source *.sh用它们的内容替换(不执行命令)?我想看看 bash 解释器在获取文件并扩展所有变量后执行什么。

我知道我可以使用set -n -v或运行bash -n -v script.sh 2>output.sh,但这不会替换源命令(如果 a.sh 或 b.sh 包含变量,则更少)。

我想过使用子shell,但这仍然没有扩展源代码行。我在源代码行之前和之后尝试了set +n +v和的组合set -n -v,但这仍然不起作用。

我将使用 ssh 将该输出发送到远程机器。我可以使用<<output.sh管道将内容传输到 ssh 命令中,但我无法以 root 身份登录到远程计算机,但我是 sudoer。因此,我想我可以创建脚本并将其作为 base64 编码的字符串发送(使用那个聪明的技巧base64 script | ssh remotehost 'base64 -d | sudo bash'

有解决办法吗?或者你有更好的主意吗?

bash set expansion subshell

5
推荐指数
1
解决办法
905
查看次数

Heredoc不保留空行

在这里,我试图声明一个具有多行值的变量bash

$ GET="$(cat <<EOF
> GET / HTTP/1.1
> Host: 127.0.0.1:80
> 
> EOF
> )"
Run Code Online (Sandbox Code Playgroud)

这肯定有效,但是文档末尾的空白行丢失了:

$ echo "$GET"
GET / HTTP/1.1
Host: 127.0.0.1:80
$ cat <<< "$GET"
GET / HTTP/1.1
Host: 127.0.0.1:80
Run Code Online (Sandbox Code Playgroud)

bash

5
推荐指数
1
解决办法
1969
查看次数

以编程方式检测已安装的 Common Lisp 实现

我正在编写一个 Common Lisp 应用程序。我想要一个 Bash 脚本作为应用程序的入口点。目前,我已经编写了脚本,因此用户必须输入他们的 Common Lisp 实现的名称才能运行它,所以我会./script.sh clisp为 GNU CLISP编写代码,但使用 SBCL 的人必须编写./script.sh sbcl. 这是必要的,因为与 Python 和 Ruby 等语言不同,Common Lisp 实现没有任何标准名称或调用它们的标准化方法。

有什么技巧可以检测安装了哪个 Common Lisp 实现,也许是环境变量或其他什么?基本上,我正在寻找比强迫用户传递实现名称更好的方法。

bash common-lisp detection

5
推荐指数
1
解决办法
147
查看次数

“git remote -v”显示 (fetch) 和 (push) 两次,一次用于 'github',一次用于 'origin',这是什么意思?

不确定它是否是问这个问题的正确地方,我无法理解某些东西,谷歌搜索也没有帮助。

我一直在参考git教程,(显然意味着我是新手)。

我学会了git remote -v检查远程状态的命令。好了,所有的git的教程民政事务快照像这样,显示结果:

origin  https://github.com/something/something-else.git (fetch)
origin  https://github.com/something/something-else.git (push)
Run Code Online (Sandbox Code Playgroud)

但是,当我试图命令我得到类似的结果为origin,以及github。像这样的东西:

github  https://github.com/srujan7/something-something-url.git (fetch)
github  https://github.com/srujan7/something-something-url.git (push)
origin  https://github.com/srujan7/something-something-url.git (fetch)
origin  https://github.com/srujan7/something-something-url.git (push)
Run Code Online (Sandbox Code Playgroud)

问题:

我不确定 thisgithuboriginhere 是什么意思。为什么我收到了两次?(与教程不同)我也不确定是否做错了什么,或者完全正确。将我指向其他一些解释这一点的教程也可以。

随时提出修改建议。

git bash push github git-bash

5
推荐指数
1
解决办法
7881
查看次数

多行复制粘贴到 mongo shell

我如何简单地将多行复制粘贴到 mongo shell 中。是使用脚本文件的唯一方法吗?我想快速插入一堆数据,但发生以下情况:

> db.mycollection.insert([
...    {
...       title: 'MongoDB Overview', 
...       description: 'MongoDB is no sql database',
...       by: 'tutorials point',
...       url: 'http://www.tutorialspoint.com',
...       tags: ['mongodb', 'database', 'NoSQL'],
...       likes: 100
...    },
... 
...    {
...       title: 'NoSQL Database', 
...       description: 'NoSQL database doesn't have tables',
2016-06-14T17:40:30.303+0100 E QUERY    [thread1] SyntaxError: missing } after property list @(shell):13:41

>       by: 'tutorials point',
...       url: 'http://www.tutorialspoint.com',
...       tags: ['mongodb', 'database', 'NoSQL'],
...       likes: 20, 
...       comments: [
... …
Run Code Online (Sandbox Code Playgroud)

linux bash terminal mongodb

5
推荐指数
1
解决办法
3081
查看次数

标签 统计

bash ×10

linux ×2

shell ×2

bc ×1

c ×1

common-lisp ×1

detection ×1

expansion ×1

expression ×1

git ×1

git-bash ×1

github ×1

java ×1

mongodb ×1

processing ×1

push ×1

set ×1

sh ×1

ssl ×1

subshell ×1

svn ×1

svn-hooks ×1

tcp ×1

terminal ×1

unix ×1