相关疑难解决方法(0)

如何将数组参数传递给Bash脚本

令我惊讶的是,我在1小时后找不到答案.我想将一个数组传递给我的脚本,如下所示:

test.sh argument1 array argument2
Run Code Online (Sandbox Code Playgroud)

我不想把它放在另一个bash脚本中,如下所示:

array=(a b c)
for i in "${array[@]}"
do
  test.sh argument1 $i argument2
done
Run Code Online (Sandbox Code Playgroud)

arrays bash arguments

29
推荐指数
3
解决办法
5万
查看次数

为什么带有引号的空格的命令在通过 ssh 传递时不起作用?

我正在构建这个项目,其中我必须使用 ssh 执行 UNIX 命令。这是我的问题:当我在 UNIX shell 中执行以下命令时,

echo "Hello           World"
Run Code Online (Sandbox Code Playgroud)

它产生输出:

echo "Hello           World"
Run Code Online (Sandbox Code Playgroud)

中间有 5 个空格,因为参数是在双引号内给出的。我也想用 ssh 达到同样的效果。我试图使用反斜杠转义双引号,如下所示:

ssh localhost echo \"Hello           World\"
Run Code Online (Sandbox Code Playgroud)

因为我不想让 bash 处理引号。但它只是产生

Hello           World
Run Code Online (Sandbox Code Playgroud)

“Hello”后面只有一个空格,这是为什么?

unix ssh bash quotes escaping

3
推荐指数
1
解决办法
1782
查看次数

ssh bash -c 退出状态不会传播

根据man ssh之前的答案,ssh 应该传播它在远程服务器上运行的任何进程的退出状态。我似乎发现了一个令人费解的例外!

$ ssh myserver exit 34 ; echo $?
34
Run Code Online (Sandbox Code Playgroud)

好的...

$ ssh myserver 'exit 34' ; echo $?
34
Run Code Online (Sandbox Code Playgroud)

好的...

$ ssh myserver bash -c 'exit 34' ; echo $?
0
Run Code Online (Sandbox Code Playgroud)

什么?!?

$ ssh myserver
ubuntu@myserver $ bash -c 'exit 34' ; echo $?
34
Run Code Online (Sandbox Code Playgroud)

所以问题似乎不是 ssh 或bash -c孤立的问题,但它们的组合并不像我预期的那样。

我正在设计一个在远程计算机上运行的脚本,该脚本需要采用在客户端计算的参数列表。为了便于论证,假设如果任何参数不是远程服务器上的文件,则它会失败:

ssh myserver bash -c '
    for arg ; do
        if [[ ! -f "$arg" ]] ; then
            exit 1
        fi
    done …
Run Code Online (Sandbox Code Playgroud)

ssh bash

3
推荐指数
1
解决办法
571
查看次数

标签 统计

bash ×3

ssh ×2

arguments ×1

arrays ×1

escaping ×1

quotes ×1

unix ×1