标签: bash

rsync 抱怨 Bash 脚本中的“缺少尾随-”

尝试在屏幕会话中将文件从一台服务器同步到另一台服务器。我决定放入一个 Bash 脚本,而不是每次都写长命令。但是,当我运行它时,出现Missing trailing-" in remote-shell command.错误。

想知道脚本中出了什么问题。

root@127.0.0.1:~# /raid/data/module/bin/rbk.sh Movies /raid/data/Movies rsync_target/

/raid/data/module/bin/screen -S Movies 

/opt/bin/rsync --rsh="ssh -p 10022 -c des"\
--rsync-path="/opt/bin/rsync" --inplace --progress -a -vv \
/raid/data/Movies sys@192.168.1.15:/raid/data/rsync_target/

Missing trailing-" in remote-shell command.
rsync error: syntax or usage error (code 1) at main.c(361) [sender=3.0.5]
Run Code Online (Sandbox Code Playgroud)

该脚本会先回显它将执行的操作,然后再执行该命令。下面是我的脚本的转储:

#!/bin/bash
SCREEN="/raid/data/module/bin/screen"
SCREENOPT="-S"
SCREEN_TITLE=$1

RSYNC="/opt/bin/rsync"
RSYNCOPT="--rsh=\"ssh -p 10022 -c des\" --rsync-path=\"/opt/bin/rsync\" --inplace --progress -a -vv"

SOURCE=$2

REMOTE_USER="sys@"
REMOTE_HOST="192.168.1.15"
REMOTE_BASE=":/raid/data/"
REMOTE_TARGET=$3

echo ${SCREEN} ${SCREENOPT} ${SCREEN_TITLE}

echo ${RSYNC} ${RSYNCOPT} ${SOURCE} ${REMOTE_USER}${REMOTE_HOST}${REMOTE_BASE}${REMOTE_TARGET}
${RSYNC} ${RSYNCOPT} …
Run Code Online (Sandbox Code Playgroud)

ssh bash rsync

14
推荐指数
2
解决办法
1万
查看次数

脚本编写:在 XML 文件的标记中提取值最简单的方法是什么?

我想读取 pom.xml(Maven 的“项目对象模型”)并提取版本信息。下面是一个例子:

<?xml version="1.0" encoding="UTF-8"?><project 
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany</groupId>
    <artifactId>project-parent</artifactId>
    <name>project-parent</name>
    <version>1.0.74-SNAPSHOT</version>
    <dependencies>
        <dependency>
        <groupId>com.sybase.jconnect</groupId>
        <artifactId>jconnect</artifactId>
        <version>6.05-26023</version>
    </dependency>
    <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>1.5.2</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jdmk</groupId>
        <artifactId>jmxtools</artifactId>
        <version>1.2.1</version>
    </dependency>
    <dependency>
        <groupId>org.easymock</groupId>
        <artifactId>easymock</artifactId>
        <version>2.4</version>
    </dependency>       
</dependencies>
</project>
Run Code Online (Sandbox Code Playgroud)

如何从上面提取版本“1.0.74-SNAPSHOT”?

希望能够使用简单的 bash 脚本 sed 或 awk 来做到这一点。否则首选简单的python。

编辑

  1. 约束

    linux box 在公司环境中,所以我只能使用已经安装的工具(不是说我不能请求诸如 xml2 之类的实用程序,但我必须经历很多繁文缛节)。一些解决方案非常好(已经学习了一些新技巧),但由于环境限制,它们可能不适用

  2. 更新的 xml 列表

    我在原始列表中添加了依赖项标签。这将显示一些 hacky 解决方案在这种情况下可能不起作用

  3. 发行版

    我使用的发行版是 RHEL4

linux unix xml bash python

14
推荐指数
4
解决办法
7万
查看次数

在 bash 中输入部分命令后,有没有办法使用 ctrl-r ?

在 bash 中,Ctrl+r命令非常有用,我输入Ctrl+r whatever并在我的历史记录中搜索包含单词的命令whatever。但是,如果我输入whatever并意识到我想搜索该词并点击Ctrl+r没有任何反应。

有没有办法按下一个键并让它表现得好像我输入了Ctrl+r whatever而不是whatever Ctrl+ r

我有以下内容.inputrc

"\C-p": history-search-backward
Run Code Online (Sandbox Code Playgroud)

但这仅在行的开头相同时才有效。

bash shell emacs key-binding readline

14
推荐指数
1
解决办法
2072
查看次数

如何使用 zsh 中的 bash 'source' 一个 shell 脚本?

我正在使用 zsh 并且非常喜欢它,但是与 Android 源代码一起工作很多,它具有需要正确评估 bash 的编译脚本。这些脚本需要在编译之前获取并定义编译期间使用的环境变量和 shell 函数。

Zsh 无法获取这些文件,并且如果我尝试在emulate bash每次点击空格时尝试发出我的 shell 变得非功能性并出现大量这些错误(我正在使用 oh-my-zsh,也许这是一个原因?):

url-quote-magic:24: bad pattern: ( ):/(|/localhost)/*
Run Code Online (Sandbox Code Playgroud)

有没有办法让我不切换到 bash 来评估这些文件,或者调用 bash 实例并将其在采购期间定义的新环境变量/函数导入我的 zsh 会话?或者我注定每次需要在 Android 上工作时都切换到 bash?

编辑:找到了我自己问题的答案。使用另一个 shell 获取文件似乎是不可能的,但是在 Android 宏文件失败的情况下,这个页面带来了一个修复:

http://nilvec.com/building-cyanogen-from-source/

基本上,简单的设置unsetopt nomatch将要求 zsh 停止抱怨不匹配的通配符,这足以使脚本完成。仍然会留下一个错误,关于使用completebash 内部命令为一个 Android 宏添加完成功能,但这里绝对不是关键。

bash zsh oh-my-zsh

14
推荐指数
1
解决办法
7980
查看次数

如何在 *N*X 中列出目录名称但不列出其内容?

如果我为与模式匹配的目录执行简单的ls指定文件名模式,例如ls A*,它将进入目录并提供完整列表,但是我怎么能只获取./其中目录的列表和名称,而不是他们的内容?

linux unix bash shell macos

14
推荐指数
1
解决办法
8096
查看次数

Bash:在读取循环中读取输入不起作用

在 while 读取循环中读取输入似乎不起作用

while read line
do
 echo "get some input from the user"
 read response
done < some_file.txt
Run Code Online (Sandbox Code Playgroud)

执行不会像读取在循环之外那样暂停。为什么是这样?是否有在 while 读取循环中读取输入的解决方法?

bash

14
推荐指数
2
解决办法
2万
查看次数

显示 ssh 私钥的安全问题

我犯了一个巨大的错误,或者至少我认为我犯了:我“猫”了我的私人 SSH 密钥

cat ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

我现在担心我创建了一个安全漏洞,允许其他用户通过查看 bash/scrollback 历史记录或使用其他方法来查看我的私钥。所以,我的问题:

  1. 我真的损害了 SSH 密钥对的安全性吗?
  2. 是否有“足够安全”的修补方法,不包括创建新密钥对的明显(和最安全)方法?

(注意:我是这台机器的唯一用户,所以我实际上并不关心我的具体情况,但我认为这将是一个有趣的问题。)

security ssh bash private-key

14
推荐指数
1
解决办法
290
查看次数

我可以反转终端的流向吗?

我不确定如何以其他方式表达这个问题,但就是这样。是否可以反转终端打印文本的方式?

例如,如果我输入一个命令,我从终端的底部输入它,输出将从底部产生。我想知道我是否可以反转这个,所以我从顶部输入,而我的输出来自顶部。

terminal bash cmd.exe

14
推荐指数
1
解决办法
3972
查看次数

如何在bash中删除字符串中间的字符

在 bash 中,我有一个字符串,我试图删除字符串中间的一个字符。我知道我们可以像这样从字符串的开头或结尾删除字符:

myVar='YES'
myVar="${myVar#'Y'}"
myVar="${myVar%'S'}"
Run Code Online (Sandbox Code Playgroud)

但是我怎样才能删除中间的那个?

bash

14
推荐指数
2
解决办法
3万
查看次数

为什么 bash 需要 &amp;&amp; 在一行上回显变量?

为什么 SOMETHING=1 && echo $SOMETHING需要&&返回1
为什么不SOMETHING=1 echo $SOMETHING返回1

unix bash echo macos

14
推荐指数
1
解决办法
2389
查看次数

标签 统计

bash ×10

unix ×3

linux ×2

macos ×2

shell ×2

ssh ×2

cmd.exe ×1

echo ×1

emacs ×1

key-binding ×1

oh-my-zsh ×1

private-key ×1

python ×1

readline ×1

rsync ×1

security ×1

terminal ×1

xml ×1

zsh ×1