标签: bash

采购环境输出

我有一些shell代码需要调试,因此我将代码转储了其环境到文件中

env > env.txt
Run Code Online (Sandbox Code Playgroud)

并使用我的测试脚本来获取它的源代码test.sh:

. ./env.txt
echo $EXAMPLE
echo $EXAMPLE2
Run Code Online (Sandbox Code Playgroud)

env.txt的内容是:

EXAMPLE=sh /hello/command.sh
EXAMPLE2=/just/some/path
Run Code Online (Sandbox Code Playgroud)

但是,env不会在其值两边加上引号,这往往会导致$ EXAMPLE出现问题,我收到此错误

test.sh:/hello/command.sh:未找到

很明显,它试图运行它而不是设置变量。

您发现此问题最快的解决方法是什么?

linux bash shell sh

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

Bash变量来自带有管道,引号等的命令

我有一个命令,我用来获取hostname.localdomain

dig axfr @dc1.localdomain.com localdomain.com | grep -i Lawler | awk '{ getline ; $1=substr($1,1,length($1)-1); print $1 ; exit }'
Run Code Online (Sandbox Code Playgroud)

这很好地返回一个结果,如:

michael.lawler.localdomain.com

我想进一步将该结果用作bash脚本中的变量.

我似乎无法越过第一个管道.

如果我 VAR="dig axfr @dc1.localdomain.com localdomain.com | grep -i Lawler | awk '{ getline ; $1=substr($1,1,length($1)-1); print $1 ; exit }'"

...我回到整个区域转移.我也尝试$过在dig命令之前添加许多小改动,没有引号,似乎没有任何效果.任何方向都非常感谢.

variables bash pipe

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

有没有办法在退出时执行命令(无论脚本如何退出)?

我有一个脚本写出临时文件,以帮助执行.在我的脚本结束时,我只是打电话rm filename来清理我创建的临时文件.问题是脚本因错误而中断或被中断时.在这些情况下,rm永远不会达到语句,因此永远不会清除文件.有没有办法我可以指定一些命令在退出时运行,无论它是否成功退出?

bash exit

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

关联数组'".keys()"

在Bash(v4 +)中:

$ declare -A x=([foo]=bar [coconut]=banana)
$ echo ${x[@]}
Run Code Online (Sandbox Code Playgroud)

得到:

banana bar
Run Code Online (Sandbox Code Playgroud)

我可以输入什么来获取此信息:

foo coconut
Run Code Online (Sandbox Code Playgroud)

bash

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

所有bash历史记录在包含空格的目录上没有此类文件或目录错误

我一直在尝试实现博客文章" 重新访问所有bash历史记录 "中描述的功能.基本上,脚本允许您执行的操作是永久保留所有bash历史记录并保持多个会话.

有人在Github上很容易地访问所有代码.

但是每当我使用带空格的目录时:

cd ~/Desktop/
mkdir "dir with spaces"
cd dir\ with\ spaces/
Run Code Online (Sandbox Code Playgroud)

我下次登录时会收到如下错误:

-bash: pushd: /Users/jack/Desktop/dir: No such file or directory
-bash: pushd: with: No such file or directory
-bash: pushd: spaces: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我理解的唯一参考似乎没有导致问题:

# Now change to the new dir and add to the top of the stack
pushd "${the_new_dir}" > /dev/null
Run Code Online (Sandbox Code Playgroud)

我希望一些bash脚本专家可以指出代码中的错误,以便我可以修补它.

bash .bash-profile

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

如何分发我的Python/shell脚本?

我为自己编写了一个非常简单的命令行实用程序.设置包括:

  1. 包含应用程序/源的单个.py文件.
  2. 一个运行python脚本的可执行(chmod + x)shell脚本.
  3. 我的.bash_profile中的一行将命令别名如下:( alias cmd='. shellscript'因此它在相同的终端上下文中运行.)

因此我可以有效地输入cmd它来运行它,一切都很好.

我的问题是,如何将此分发给其他人?显然我可以用我的代码写出这些指令并完成它,但有更快的方法吗?我偶尔会看到你粘贴到控制台中的那些单行程序来安装一些东西.我该怎么办?我似乎记得他们涉及curl和管道,sh但我不记得了.

python bash shell

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

Cron执行的Bash脚本中的PHP脚本序列未运行

我有四个PHP脚本,执行需要按顺序执行的各种任务.

而不是为每个PHP脚本创建一个cron条目,我认为我会聪明并将其包装为Bash脚本,如下所示:

#!/bin/bash

# set notification email.
NOTIFYEMAIL="webmaster@example.com"

# set PHP path.
PHP="$(which php)"

# set folder path.
FOLDER="/var/www/example.com/processors/"

# list of scripts.
SCRIPTS=("script_1" "script_2" "script_3" "script_4")

# execute each script.
for i in "${SCRIPTS[@]}"
do
    SCRIPT="$FOLDER/$i.php"
    printf "Processing: %s\n" $i
    chmod +x $SCRIPT
    $PHP $SCRIPT
done

echo "Scripts have been processed." | mail -s "Scripts Processed" $NOTIFYEMAIL
Run Code Online (Sandbox Code Playgroud)

我已经单独测试了所有脚本,并且它们正常工作,将处理信息输出到终端.

/usr/bin/php /var/www/example.com/processors/script_1.php
Run Code Online (Sandbox Code Playgroud)

我甚至测试了bash脚本,该脚本按顺序调用四个PHP脚本,通过终端手动调用,也可以正常工作.

/bin/bash /var/www/example.com/processors/run.sh
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,当我离开cron在root用户crontab 上使用以下命令运行它们时,PHP脚本不会执行.

# process daily.
0 1 * * * /bin/bash /var/www/example.com/processors/run.sh > /dev/null …
Run Code Online (Sandbox Code Playgroud)

php bash ubuntu cron

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

如何使用grep/sed提取子字符串和数字

我有一个包含文本和数字的文本文件,我想使用grep只提取我需要的数字,例如,给定一个文件如下:

miss rate 0.21  
ipc 222  
stalls n shdmem 112
Run Code Online (Sandbox Code Playgroud)

所以说,我只是想提取的数据miss rate0.21.我如何用grep或sed做到这一点?另外,我需要不止一个号码,而不仅仅是后一个号码miss rate.也就是说,我可能要同时获得0.21112.示例输出可能如下所示:

0.21 222 112
Run Code Online (Sandbox Code Playgroud)

因为我需要以后绘图的数据.

regex linux bash sed

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

将结果保存到变量

如何将nc的结果保存到变量中?

我想要:

nc:连接到localhost端口1(tcp)失败:连接被拒绝

在我的变量上.我试过了:

a="$(nc -z -v localhost 1)"
echo $a
Run Code Online (Sandbox Code Playgroud)

但输出是空的.

bash netcat

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

列出具有出现次数的文本文件中的所有单词?

假设我有text.txt以下文件:

she likes cats, and he likes cats too.

我希望我的结果看起来像:

she 1
likes 2
cats 2
and 1
he 1
too 1
Run Code Online (Sandbox Code Playgroud)

如果space , .加入它会使脚本更容易,那就没问题了.

是否有一个简单的shell管道可以实现这一目标?

bash awk sed

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

标签 统计

bash ×10

linux ×2

sed ×2

shell ×2

.bash-profile ×1

awk ×1

cron ×1

exit ×1

netcat ×1

php ×1

pipe ×1

python ×1

regex ×1

sh ×1

ubuntu ×1

variables ×1