相关疑难解决方法(0)

如何在Bash中将变量设置为命令的输出?

我有一个非常简单的脚本,如下所示:

#!/bin/bash

VAR1="$1"
MOREF='sudo run command against $VAR1 | grep name | cut -c7-'

echo $MOREF
Run Code Online (Sandbox Code Playgroud)

当我从命令行运行此脚本并将参数传递给它时,我没有得到任何输出.但是,当我运行$MOREF变量中包含的命令时,我能够获得输出.

我想知道如何获取需要在脚本中运行的命令的结果,将其保存到变量,然后在屏幕上输出该变量?

bash shell command-line

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

shell编程中$(command)和`command`有什么区别?

要将命令的输出存储为sh/ksh/bash中的变量,您可以执行任一操作

var=$(command)
Run Code Online (Sandbox Code Playgroud)

要么

var=`command`
Run Code Online (Sandbox Code Playgroud)

两种方法之间有什么区别?

bash shell ksh sh

241
推荐指数
5
解决办法
4万
查看次数

登录时启动ssh-agent

我有一个站点作为远程Git repo从Bitbucket.com使用SSH别名拉.我可以在我的服务器上手动启动ssh-agent,但每次通过SSH登录时都必须这样做.

我手动启动ssh-agent:

eval ssh-agent $SHELL
Run Code Online (Sandbox Code Playgroud)

然后我添加代理:

ssh-add ~/.ssh/bitbucket_id
Run Code Online (Sandbox Code Playgroud)

然后它出现在我做的时候:

ssh-add -l
Run Code Online (Sandbox Code Playgroud)

我很高兴去.有没有办法自动化这个过程,所以我不必每次登录都这样做?服务器正在运行RedHat 6.2(Santiago).

git ssh redhat bitbucket ssh-agent

230
推荐指数
8
解决办法
21万
查看次数

在git中列出每个分支及其最后修订的日期

我需要从远程仓库中删除旧的和未维护的分支.我正试图找到一种方法来列出他们上次修改日期的远程分支,但我不能.

有人知道以这种方式列出远程分支的简单方法吗?

git maintenance branch administration

130
推荐指数
6
解决办法
4万
查看次数

当我们在美元符号和括号中放入一个命令时,它在shell中意味着什么:$(command)

我只是想了解shell中的以下代码行.它用于获取当前工作目录.我知道$(variable)名称返回变量名称中的值,但$(command)应该返回什么?它在执行命令后返回值吗?在这种情况下,我们可以`用来执行命令.

CWD="$(cd "$(dirname $0)"; pwd)"
Run Code Online (Sandbox Code Playgroud)

在不同版本的shell中也可以从以下代码行获取相同的输出

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
Run Code Online (Sandbox Code Playgroud)

我无法理解的含义$(cd..$(dirname.

有人可以帮我弄清楚这个命令是如何执行的吗?

bash shell terminal ksh sh

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

在bash脚本中使用ping检查主机可用性

我想编写一个脚本,该脚本将继续检查网络中的任何设备是否应该全天在线.我试过用ping,但是

if [ "`ping -c 1 some_ip_here`" ]
then
  echo 1
else
  echo 0
fi
Run Code Online (Sandbox Code Playgroud)

给人1如果我输入有效或无效的IP地址不管.如何检查特定地址(或更好的IP地址列表中的任何设备)是否脱机?

bash networking ping connectivity

65
推荐指数
6
解决办法
20万
查看次数

Backticks vs Bash中的大括号

当我去回答这个问题时,我打算使用这个${}符号,因为我在这里已经看过很多次,所以最好用反引号.

但是,当我尝试

joulesFinal=${echo $joules2 \* $cpu | bc}
Run Code Online (Sandbox Code Playgroud)

我收到了消息

-bash: ${echo $joules * $cpu | bc}: bad substitution
Run Code Online (Sandbox Code Playgroud)

joulesFinal=`echo $joules2 \* $cpu | bc`
Run Code Online (Sandbox Code Playgroud)

工作良好.那么我需要做出哪些其他改变呢?

bash command-substitution

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

管道输出到环境变量导出命令

我正在尝试将git哈希值设置为环境变量,我认为这样做很简单:

git log --oneline -1 | export GIT_HASH=$1
Run Code Online (Sandbox Code Playgroud)

但是$1不包含任何东西.我究竟做错了什么?

sh

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

使用函数中止 bash 脚本

我尝试创建一个可以中断脚本执行的函数(由于致命错误):

quit() {
  echo -e "[ERROR]" | log
  exit 1
}
Run Code Online (Sandbox Code Playgroud)

调用示例:

if [ "$#" -eq 1 ]; then
    # Do stuff
else
    echo -e "function getValue: wrong parameters" | log
    quit
fi
Run Code Online (Sandbox Code Playgroud)

函数quit被调用(在日志文件中回显)但脚本继续运行。我读过exit只终止子shell(这是真的吗?)这意味着它终止了quit函数而不是整个脚本。

目前,我不喜欢在quit方法中使用返回码,因为它意味着很多代码重构。

有没有办法从quit函数中停止脚本?

编辑: 出现错误的情况的完整示例:

#!/bin/bash

logfile="./testQuit_log"

quit() {
  echo "quit" | log
  exit 1
}

log() {
  read data
  echo -e "$data" | tee -a "$logfile"
}


foo() {
  if [ "$#" -ne 1 ]; then …
Run Code Online (Sandbox Code Playgroud)

bash shell

4
推荐指数
1
解决办法
920
查看次数

通过SSH传递Bash命令 - 执行变量捕获

我直接通过SSH传递以下命令:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i /key/path server@111.111.111.111 'bash -s' << EOF
FPM_EXISTS=`ps aux | grep php-fpm`
if [ ! -z "$FPM_EXISTS" ]
then
        echo "" | sudo -S service php5-fpm reload
fi
EOF
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

[2015-02-25 22:45:23] local.INFO: bash: line 1: syntax error near unexpected token `('
bash: line 1: ` FPM_EXISTS=root      2378  0.0  0.9 342792 18692 ?        Ss   17:41   0:04 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)                 
Run Code Online (Sandbox Code Playgroud)

这就像它试图执行输出ps aux | grep php-fpm而不是仅仅捕获git变量.因此,如果我更改命令以尝试捕获ls,它就像尝试执行它一样,当然返回每个目录的"command not found".

如果我只是将Bash脚本的内容粘贴到文件中并运行它就可以正常工作; 但是,我似乎无法弄清楚如何通过SSH传递它.

有任何想法吗?

ssh bash

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

将Perl命令输出转换为shell变量

我是Perl的一个菜鸟,不知道这个脚本有什么问题:

#!/bin/sh
randAnPass=true;
if [ $randAnPass = true ]
then
pass=perl /root/bin/randpass
else
# prompt for setting user's password ..
echo -n "pick password for '${user}': "
read pass
fi
#echo $randAnPass;
echo "Generated pass = $pass";
Run Code Online (Sandbox Code Playgroud)

出于某种原因,它输出:

r4Nd0mP
Generated pass = 
Run Code Online (Sandbox Code Playgroud)

我希望它输出

Generated pass = r4Nd0mP
Run Code Online (Sandbox Code Playgroud)

linux shell perl

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

尝试执行"sed"命令但得到"command not found"错误

我正在尝试执行以下命令:

`sed 's/49%100%/49%!100%/' /etc/nagios/objects/services.cfg`
Run Code Online (Sandbox Code Playgroud)

但是我收到了这个错误

-bash: ###############################################################################: command not found
Run Code Online (Sandbox Code Playgroud)

如果我尝试在没有后退滴答的情况下运行它,该命令将起作用.

我尝试过以下方法:

`sed 's/49%100%/49%!100%/' /etc/nagios/objects/services.cfg` 2>&1

`sed 's/49%100%/49%!100%/' /etc/nagios/objects/services.cfg`> /dev/null
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

bash shell scripting sed

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

Bash,如何在一行代码中创建一个数组

我怎样才能一步而不是两个阶段创建一个数组,如下所示?下面的示例是在实时 Linux 系统上执行的。

POSITION=`volt |grep ate |awk '{print $4}'` #returns three integers 
declare -a POSITION_ARRAY=($POSITION)  #create an array  

Run Code Online (Sandbox Code Playgroud)

bash

-2
推荐指数
1
解决办法
162
查看次数