Questions tagged «shell-script»

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

1
我想将stdin传递给bash脚本,传递给在该bash脚本中调用的python脚本
我有一个bash脚本正在调用一个Python脚本,我想file通过stdin 来提供其内容。像这样调用bash脚本: ./script.sh < file 和的内容script.sh: #! /usr/bin/env bash pushd /some/python/virtual/environment/working/dir source venv/bin/activate python main.py ?????? deactivate popd 我不知道要填写什么,??????以file将给定的内容作为stdin传递给bash 脚本main.py。 请注意,file可以大幅文本文件,并使用bash的read是不理想的。 要求在调用bash脚本时使用stdin。我很灵活地将任何东西传递给main.py。 有什么想法可以解决这个难题吗? 加成 @cas的回答使我很清楚,我还需要解释在哪种情况下尝试使用script.sh。 我想script.sh用作中的转发脚本~/.forward,内容如下: |/path/to/script.sh 哪个后缀调用为/path/to/script.sh; 日志很清楚。使用简化版本的python脚本的简单测试,例如: |/path/to/simple/main.py 证明后缀确实会main.py在标准输入上调用邮件的内容。但是这种组合似乎不起作用。

3
在read驱动的while循环中使用read作为提示?
我有一个用例,我需要在每次迭代开始时读入多个变量,并将用户的输入读入循环。 我不知道如何探索的解决方案的可能路径- 对于分配,请使用另一个文件句柄而不是stdin 使用for循环而不是... | while read ......我不知道如何在for循环内分配多个变量 echo -e "1 2 3\n4 5 6" |\ while read a b c; do echo "$a -> $b -> $c"; echo "Enter a number:"; read d ; echo "This number is $d" ; done

5
在知道字符串的一部分的情况下查找字符串并返回字符串
例如,我有一个字符串 "Icecream123 AirplaneBCD CompanyTL1 ComputerYU1" 假设我知道我的字符串肯定包含子字符串IceCream,但我不知道它后面是什么。 在我的示例中,它可能是123,或者可能有所不同。 虽然我可以使用grep通过以下命令来检测字符串中是否存在“ Icecream”子字符串 echo $string | grep -oF 'Icecream'; 哪个会打印 Icecream 我想要一个命令来打印整个子字符串,在我的示例中是 Icecream123 当然,冰淇淋发生后的情况是随机的,并且事先未知,所以我不能做 $SUBSTRING=$(echo $string | grep -oF 'Icecream') $SUBSTRINGTRAIL=123 echo $SUBSTRING$SUBSTRINGTRAIL

4
如何在许多大文件中找到重复的行?
我有约3万个文件。每个文件包含约10万行。一行不包含空格。单个文件中的行已排序并免费重复。 我的目标:我想找到两个或多个文件中所有重复的行,以及包含重复条目的文件的名称。 一个简单的解决方案是: cat *.words | sort | uniq -c | grep -v -F '1 ' 然后我会运行: grep 'duplicated entry' *.words 您看到更有效的方法了吗?

1
脚本中是否禁用了历史记录扩展?
我了解以下错误是由于!用于历史记录扩展而导致的: $ echo "Hello!Tim" bash: !Tim: event not found 但是,如果将命令放入脚本中并运行该脚本,则不会出现问题: $ cat myscript echo "Hello!Tim" $ bash myscript Hello!Tim 这是为什么?bash手册中是否提到了原因?

1
bash,并期望在同一脚本中?
我正在尝试编写一个脚本,该脚本从.csv文件中获取IP地址并通过telnet设备以捕获“显示版本”命令输出。 到目前为止,我已经对此进行了编码: #!/bin/bash #!/usr/bin/expect -f FILE1=dispositivos.csv #file with IP's and device name set Username "user" #this is the user for telnet connection. set Password "this.is.the.pass" #pass for telnet connection. NUMERODISP="$(wc -l $FILE1 | awk '{print $1}')" #this command counts number of devices (IP's) in the file as it is a …

3
超时功能返回值
我在debian上使用了超时功能,等待5秒钟等待我的脚本。效果很好,但我遇到的问题是我需要一个返回值。像1表示超时,0表示没有超时,我该怎么做? 看一下我的代码: timeout 5 /some/local/script/connect_script -x 'status' > output.txt # here i need the return of timeout 如您所见,我的connect_script -x'status'以字符串形式返回状态并将其打印到屏幕上(可能看不到)。此问题的背景是,如果服务器(用于connect_script)被冻结,则脚本将不执行任何操作。这就是为什么我需要超时的原因。当超时时,我想重新启动服务器。我可以做到,但是我不知道如何查看它是否超时...

3
生成TCP流量的工具
我想生成一个从端口0到端口65535的TCP通信。每个端口1个tcp数据包,两个数据包之间间隔1毫秒。生成器不应该关心是否存在TCP ACK。 是否有可以产生此类流量的工具? 是否可以使用iperf和脚本来做到这一点? 也可以在Windows上运行它吗?

6
AWK-将多个.dat文件的第二行输出到一个文件
我有多个文件,例如:(实际上我有80个) file1.dat 2 5 6 9 7 1 file2.dat 3 7 8 4 1 3 我想最后得到一个包含所有第二行的文件。即 output.dat 6 9 8 4 到目前为止,我所拥有的内容虽然循环了文件名,但是之前覆盖了文件。例如上述文件的输出将只是 8 4 我的shell脚本看起来像这样: post.sh TEND = 80 TINDX = 0 while [ $TINDX - lt $TEND]; do awk '{ print NR==2 "input-$TINDX.dat > output.dat TINDX = $((TINDX+1)) done

3
如何在不删除尾随换行符的情况下将stdin捕获为变量?
在shell脚本中... 如何在不删除尾随换行符的情况下将stdin捕获为变量? 现在我已经尝试: var=`cat` var=`tee` var=$(tee) 在所有情况下$var,输入流都不会包含尾随换行符。谢谢。 还:如果输入中没有尾随换行符,则解决方案不得添加。 根据接受的答案进行更新: 我在代码中使用的最终解决方案如下: function filter() { #do lots of sed operations #see https://github.com/gistya/expandr for full code } GIT_INPUT=`cat; echo x` FILTERED_OUTPUT=$(printf '%s' "$GIT_INPUT" | filter) FILTERED_OUTPUT=${FILTERED_OUTPUT%x} printf '%s' "$FILTERED_OUTPUT" 如果您想查看完整代码,请参阅github页面的expandr,这是我为信息安全目的而开发的一个开源git关键字-扩展过滤器外壳脚本。根据.gitattributes文件(可以是特定于分支的文件)和git config中设置的规则,无论何时将其签入或签出存储库,git都会通过expandr.sh Shell脚本通过管道传输每个文件。(这就是为什么保留任何尾随的换行或缺少换行的关键。)这使您可以清除敏感信息,并交换不同的特定于环境的值集以进行测试,暂存和实时分支。

3
在bash脚本中等待网络
我正在运行一个脚本,该脚本依赖于网络正常运行并安装网络共享。该脚本在登录时运行(启动后会自动发生)。问题在于,在脚本运行时,我通常还没有IP地址(DHCP)。目前,我只是将脚本休眠15秒钟,但是我根本不喜欢这种方法,因为我希望能够告诉用户是否有问题。 我的计划是,在没有IP地址的情况下进行循环,然后再继续。至关重要的是,它必须在一段时间后超时。我if [ ifconfig | grep "192.168.100" ];想到的是,但是发生的是grepconsumes ];和不喜欢它。然后bash也变得不高兴,因为它找不到那个];grep吃了。然后,我什至没有执行超时。 有人建议保留一个变量,并在每次迭代中睡一秒钟,然后每次增加该变量。这是我完整的(不起作用的)脚本(我对bash脚本还很陌生): x=0 while [ ifconfig | grep "192.168.100." > /dev/null ]; do echo "no nework" if "$x" -gt 200; then #Time out here exit 1 x=$((x+1)) sleep .1 fi done #continue with rest of script... 任何朝着正确方向的指针将不胜感激!

2
将变量传递给使用'EOF'的bash脚本,并将该变量视为文字。
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加详细信息并通过编辑此帖子来澄清问题。 5年前关闭。 在此脚本中,我最终将“ $ 1”保存到/ test文件中。 #!/bin/bash cat > /test << 'EOF' $1 EOF 事实是..我需要保持 'EOF' 为'EOF',因为我的论点($ 1)包含美元符号。 但我需要保存该参数而不是保存$ 1



5
有没有办法听过程?
我想知道是否有一种方法可以监听Linux和UNIX中的进程-何时结束以及process(script)的退出代码是什么。 我不想编写将运行X几秒钟的脚本,并检查ps -ef | grep PID该进程是否仍然存在。我想知道该进程是否可以在结束时通知我以及退出代码是什么。

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.