Questions tagged «shell-script»

有关shell脚本,由shell解释的可执行文件(bash,zsh等)的问题。

9
命令行工具可以“ cat”成对扩展文件中的所有行
假设我有一个看起来像这样的文件(称为sample.txt): Row1,10 Row2,20 Row3,30 Row4,40 我希望能够处理此文件中的流,该流本质上是所有四行的成对组合(因此我们应该最终得到总共16行)。例如,我正在寻找流式(即有效)命令,其输出为: Row1,10 Row1,10 Row1,10 Row2,20 Row1,10 Row3,30 Row1,10 Row4,40 Row2,20 Row1,10 Row1,20 Row2,20 ... Row4,40 Row4,40 我的用例是我想将此输出流式传输到另一个命令(如awk),以计算有关此成对组合的一些度量。 我有一种方法可以在awk中执行此操作,但是我担心的是,我对END {}块的使用意味着我基本上将整个文件存储在内存中,然后再输出。示例代码: awk '{arr[$1]=$1} END{for (a in arr){ for (a2 in arr) { print arr[a] " " arr[a2]}}}' samples/rows.txt Row3,30 Row3,30 Row3,30 Row4,40 Row3,30 Row1,10 Row3,30 Row2,20 Row4,40 …





3
ls -s什么时候打印“ 0”
当然,测试文件是否为空的标准方法是使用test -s FILE,但是我们的一位客户已收到包含以下测试的脚本: RETVAL=`ls -s ./log/cr_trig.log | awk '{print $1}'` if test $RETVAL -ne 0 then echo "Badness: Log not empty" exit 25 fi 供应商声称它可以在他们测试过的两个环境中工作。不用说,它在我测试过的两个地方都严重失败。 所以,我很好奇。什么时候ls -s打印0空文件? 到目前为止,这是我的发现: Linux上的GFS:4 Linux上的ext4:0 Solaris上的ZFS:1 Solaris上的UFS:0 AIX上的jfs:0 HP-UX上的VxFS:0 HP-UX上的HFS:0 在Mac OS X上的HFS:0 我还没有检查过网络文件系统。 问:我如何才能优雅地向其他人解释他们的脚本是错误的? 我认为“正确”的版本是: if test ! -s ./log/cr_trig.log then echo "Badness: Log …

2
如何安全地将变量传递给启用了root的脚本?
这个问题是完全笼统的,不仅适用于我的情况,而且...我有一个小型busybox设备,希望非root用户能够使用root特权执行特定脚本。例如,类似以下这样$1的小脚本来启用DHCP,其中在cmdline(!!)上发送的唯一变量()是要发送的主机名: #!/bin/bash udhcpc -b -i eth0 -h $1 像这样运行udhcpc需要root用户访问权限,因此,我计划进行修改/etc/sudoers以包含此行: joe ALL = NOPASSWD: /path/to/enable_dhcp.sh 只需运行以下命令,即可使“ joe”轻松地以root特权运行该脚本: sudo /path/to/enable_dhcp.sh 而不是要求输入密码(这是我想要的,因为我希望joe能够编写此脚本)。 现在..我知道(或者至少我认为这样做),$1在可以轻松使用root特权运行的脚本中使用是一个可怕的想法,因为您可以向其中注入任何内容。 那么...解决此问题的最佳方法是什么?我如何让Joe用root特权执行我想做的事情,如何允许他传入变量(或者像使用环境变量那样有效地传递变量),同时又不对注入攻击敞开大门?


1
Python脚本启动时如何激活Virtualenv?
我想计划在特定日期使用cron运行python脚本,问题是example.py要正常工作example-env必须被激活,有什么方法可以example.py在cron执行时激活它自己的virtualenv吗? 如果没有,那么我是否必须创建一个bash.sh包含以下内容的bash脚本: #!/usr/bin/env bash workon example-env python2 example.py 然后安排在特定日期由cron执行?还是我需要做其他事情? 两种方式对我都很好,我只想知道正确的方法。也许我更喜欢bash脚本方法,因为我有很多要运行的Python文件,因此如果我将它们全部放入bash脚本中并进行调度,这对我来说似乎比较容易,但是我仍然不知道正确的方法,因此我正在寻求建议。

1
为什么我的子进程的PGID不是父进程的PID?
因此,我到处都读到该命令应终止父进程的所有子进程: kill -- -$$ 在kill命令中使用负ID引用了一个PGID,从示例中我已经看到,子进程的PGID似乎应该是父进程的PID,但在我的系统上不是这样。 在我的系统上,子代的PGID与父脚本的PGID相同,后者实际上是bash。 这里发生了什么?示例是错误的还是我的系统设置不同? 我需要实现的是在不终止父进程的情况下终止子进程,因此我不想向父进程所在的PGID发送终止信号。

2
多个流程之间的沟通
我有一个bash脚本,该脚本将manager()函数作为x时间的单独进程运行。如何从脚本内部将消息转发到所有manager()进程? 我已经读过有关匿名管道的信息,但是我不知道如何与它共享消息。.我尝试使用命名管道进行操作,但是看来我必须为每个进程创建一个单独的命名管道吗? 最优雅的方法是什么? 到目前为止,这是我的代码: #!/bin/bash manager () { while : do echo "read what has been passed to \$line" done } x=1 while [ $x -le 5 ] do manager x & x=$(( $x + 1 )) done while : do while read line do echo "What has been passed …

2
检查bash / shell脚本依赖性
是否有方法/命令来检查bash脚本的依赖性?换句话说,对以下问题的回答:用户应安装哪些库来运行脚本? 我可以通过阅读脚本并检查其调用的其他库/命令来手动执行此操作,但这对于长脚本来说并不明显。

3
可靠的后台进程返回码
让我们假设以下bash代码: foo > logfile 2>&1 & foo_pid=$! while ps -p$foo_pid do ping -c 1 localhost done wait $foo_pid if [[ $? == 0 ]] then echo "foo success" fi 是否可以安全地假定$?确实包含的返回码foo而不包含的返回码ping?如果该问题的答案是:“您不能假设这一点。” 那么,如何修改这段代码以确保$?始终包含返回代码foo?

5
如何在Linux bash脚本中捕获错误?
我做了以下脚本: # !/bin/bash # OUTPUT-COLORING red='\e[0;31m' green='\e[0;32m' NC='\e[0m' # No Color # FUNCTIONS # directoryExists - Does the directory exist? function directoryExists { cd $1 if [ $? = 0 ] then echo -e "${green}$1${NC}" else echo -e "${red}$1${NC}" fi } # EXE directoryExists "~/foobar" directoryExists "/www/html/drupal" 该脚本有效,但是在我的回声旁边,当 cd $1 …

9
使用expr将两个数字相加
我正在学习Shell脚本以获取我目前正在攻读的IT文凭。我正在尝试编写一个小脚本,该脚本将两个数字相加,如给出的教程之一所示。 echo "Enter two numbers" read num1 num2 sum = 'expr $num1 + $num2' echo "The sum is = $sum" 但是,当我授予它执行权限并运行脚本时,它给了我这个错误。 sum: =. No such file or directory. sum: expr $num1 + $num2: No such file or directory 我尝试在Ubuntu和Fedora上都运行此命令,但发生相同的错误。谁能告诉我我在这里想念的吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.