相关疑难解决方法(0)

在bash shell脚本中传播所有参数

我正在编写一个调用另一个脚本的非常简单的脚本,我需要将参数从当前脚本传播到我正在执行的脚本.

例如,我的脚本名称是foo.sh和调用bar.sh

foo.sh:

bar $1 $2 $3 $4
Run Code Online (Sandbox Code Playgroud)

如何在不明确指定每个参数的情况下执行此操作?

bash command-line-arguments

769
推荐指数
10
解决办法
39万
查看次数

检查Bash数组是否包含值

在Bash中,测试数组是否包含某个值的最简单方法是什么?

编辑:在答案和评论的帮助下,经过一些测试后,我想出了这个:

function contains() {
    local n=$#
    local value=${!n}
    for ((i=1;i < $#;i++)) {
        if [ "${!i}" == "${value}" ]; then
            echo "y"
            return 0
        fi
    }
    echo "n"
    return 1
}

A=("one" "two" "three four")
if [ $(contains "${A[@]}" "one") == "y" ]; then
    echo "contains one"
fi
if [ $(contains "${A[@]}" "three") == "y" ]; then
    echo "contains three"
fi
Run Code Online (Sandbox Code Playgroud)

我不确定它是否是最佳解决方案,但似乎有效.

arrays bash

387
推荐指数
18
解决办法
47万
查看次数

将所有参数从Bash脚本传递给另一个命令

获取bash脚本的所有给定参数并将它们全部传递到脚本中的另一个命令的最简单方法是什么?例如:

命令行:

./runProgram.sh [ARGS HERE]
Run Code Online (Sandbox Code Playgroud)

脚本:

#! /bin/bash
cd bin/
java com.myserver.Program [ARGS HERE]
Run Code Online (Sandbox Code Playgroud)

bash scripting parameter-passing command-line-arguments

276
推荐指数
0
解决办法
6万
查看次数

Bash中"$ @"和"$*"有什么区别?

在我看来,它们都存储了所有命令行参数.

两者之间有区别吗?

variables bash command-line-arguments

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

如何将目录文件列表存储到数组中?

我正在尝试将文件列表存储到一个数组中,然后再次遍历该数组.下面是我ls -ls从控制台运行命令时得到的内容.

total 40
36 -rwxrwxr-x 1 amit amit 36720 2012-03-31 12:19 1.txt
4 -rwxrwxr-x 1 amit amit  1318 2012-03-31 14:49 2.txt
Run Code Online (Sandbox Code Playgroud)

我写的以下bash脚本将上述数据存储到bash数组中.

i=0
ls -ls | while read line
do
    array[ $i ]="$line"        
    (( i++ ))
done
Run Code Online (Sandbox Code Playgroud)

但是当我echo $array,我什么都没得到!

仅供参考,我这样运行脚本: ./bashscript.sh

bash shell

40
推荐指数
4
解决办法
10万
查看次数

保留bash函数参数中的引号

我想要做的是,作为函数的输入,可以包括引号(单引号或双引号)和与该函数提供的行完全相同的回声.例如:

function doit {
   printf "%s " ${@} 
   eval "${@}"
   printf " # [%3d]\n" ${?}
}
Run Code Online (Sandbox Code Playgroud)

其中,给出以下输入

doit VAR=42
doit echo 'single quote $VAR'
doit echo "double quote $VAR"
Run Code Online (Sandbox Code Playgroud)

产量如下:

VAR=42  # [  0]
echo single quote $VAR  # [  0]
echo double quote 42  # [  0]
Run Code Online (Sandbox Code Playgroud)

所以变量扩展的语义就像我期望的那样得到保留,但是我无法得到提供给函数的行的确切格式.我想要的是doit echo 'single quote $VAR'结果echo 'single quote $VAR'.

我确信这与bash在传递给函数之前处理参数有关; 我只是想找个方法(如果可能的话).

编辑

所以我的目的是影响脚本的执行,同时提供执行的精确副本,可以用作诊断工具,包括每个步骤的退出状态.

虽然我可以通过做类似的事情获得上述所需的行为

while read line ; do 
   doit ${line}
done < ${INPUT}
Run Code Online (Sandbox Code Playgroud)

面对控制结构(即等) …

bash quotes arguments function

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

将命令发送到后台进程

我有一个以前运行的进程(process1.sh),它在后台运行,PID为1111(或其他任意数字).我如何command option1 option2使用1111的PID 发送类似于该过程的内容?

并不想开始一个新的process1.sh!

bash process

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

bash脚本中$ @和$*之间的差异

下面有4个bash片段.我打电话给他们./script.sh a b c

for arg in $@; do 
echo "$arg"
done   ## output "a\nb\nc"

for arg in "$@"; do
echo "$arg"
done  ## output "a\nb\nc" -- I don't know why

for arg in $*; do
echo "$arg"
done  ##    output "a\nb\nc"

for arg in "$*"; do
echo "$arg"
done    ## output "abc"
Run Code Online (Sandbox Code Playgroud)

我不知道什么是之间准确的区别$@$*,
我想"$@""$*"应该是一样的,但事实并非如此.为什么?

linux bash shell

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

喜欢将bash脚本中的所有命令行参数存储到单个变量中

假设我有一个名为foo.sh的bash脚本.

我想这样称呼它

foo.sh Here is a bunch of stuff on the command-line
Run Code Online (Sandbox Code Playgroud)

我希望它将所有文本存储到一个变量中并将其打印出来.

所以我的输出是:

Here is a bunch of stuff on the command-line
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

unix linux bash shell command-line-interface

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

意外令牌`echo'附近的语法错误

我试图用命令行中的IP地址作为参数执行以下代码; 但我得到一个错误说 - ":第6行:意外令牌`echo'附近的语法错误"

.

#!/bin/sh
echo $1;
declare -a values=$(ssh -q  jboss@$1 "ps -eo pcpu,pid,user | sort -r -k1 | less | grep jboss");
for value in ${values[*]} do
   echo $value;
done
Run Code Online (Sandbox Code Playgroud)

你能帮我纠正这个错误吗?

ssh bash shell jboss

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