天道酬勤,学无止境

shell

使用 sed 编写 shell 脚本(shell scripting using sed)

问题 我想从标准输入读取,删除所有'/',并将输出写入标准输出。 因此,一个包含以下内容的文件: /ab1/1a6/ 17 /a/b/1 将有输出: ab11a6 17 ab1 我认为它应该是这样的: read input sed -r 's/\/[^\/]*\/[^\/]*\/.*/"I not sure what do I need to put in here"/g' echo $input 我真的不知道我需要什么来放置“替换”部分。 有什么建议吗? 回答1 sed 's./..g' 这将删除每行上的所有/字符,因此您不需要替换部分。 您可以使用/作为分隔符并在文本中对其进行转义: s/\///g或选择不同的标点符号作为分隔符: s./..g 因此,如果您想转换一个名为input.txt的文件并将输出写入output.txt : sed 's./..g' input.txt > output.txt # or sed 's./..g' < input.txt > output.txt 回答2 做你所要求的最简单的程序是: tr -d '/' 如果你输入,你会得到你想要的输出 - no / characters 你不需要read或echo语句 sed 的行为与其他人显示的相同,默认情况下 tr & sed 从 stdin 读取并写入 stdout: sed 's/\///g'

2021-09-25 18:27:03    分类:技术分享    shell

导出在后台进程中不起作用(export doesn't work in a background process)

问题 管道文件 export START=100 . ./other.sh & wait 其他.sh sleep 5 export END=200 但是我在export -p没有看到变量END 。 如果我在前台获取 other.sh ,它虽然可以工作。 export START=100 . ./other.sh 如何从后台进程导出变量? 任何解决方法? 回答1 子进程不能改变父进程的环境,你需要以某种方式从父进程声明变量。 例如使用文件: 管道.sh: export START=100 . ./other.sh > tmp & wait source tmp rm tmp echo $END 其他.sh: sleep 5 echo "export END=200" 另请参阅此答案。

2021-09-25 17:54:04    分类:技术分享    bash   shell

在 KornShell 中构建动态变量名称(Building Dynamic Variable Names in KornShell)

问题 我进行了搜索,但没有找到与我正在尝试做的事情完全相同的内容。 我有一个服务器主机名和 IP 列表 服务器 | 异丙醇服务器b | IPb 服务器 | IPn 我想cat这个文件并将每个元素放入变量中 Server_Exist_1 IP_Var_1 Server_Exist_2 IP_Var_2 Server_Exist_n IP_Var_n 我目前拥有的是以下 KornShell (ksh): Counter=0 cat hostfile|while read line; do Server_Var_"$Counter"=echo $line | awk -F"|" '{print $1}' IP_Var_"$Counter"=echo $line | awk -F"|" '{print $2}' echo $Server_Var_[*] $IP_Var_[*] done 任何帮助表示赞赏。 回答1 $ cat hostfile server1 | 192.168.1.101 server2 | 192.168.1.102 server3 | 192.168.1.103 $ cat foo #!/bin/sh counter=0 while IFS=" |" read name ip; do eval Server_VAR_$counter=$name eval IP_VAR

2021-09-25 17:48:06    分类:技术分享    shell   variables   dynamic   ksh

使用 Java 中的进程构建器生成多个进程(Spawning multiple process using process builder from Java)

问题 我正在开发一个 Web 应用程序,其中使用 Java 作为前端,使用 shell 作为后端。 我在 shell 中处理大量文件 .. 例如,如果我必须处理 100 个文件。 我计划从 Java 应用程序生成 4 个子进程。 我阅读了有关流程生成器的信息。 但是我不清楚如何使用 start() 方法生成多个进程,然后等待所有进程完成并再次继续处理。 任何与此相关的想法对我都非常有用。 谢谢你。 回答1 一般来说, start 会代表你调用Runtime.exec(...) 。 一旦运行(在它自己的小进程中关闭),您可以通过进程输入和输出流与它交互。 在我自己的工作中,我监控输入和错误流。 为此,我为每个流生成一个新线程并通过stream.read()方法监视stream.read()并查找 -1 的返回结果以确定流何时完成。 我使用第三个“监视器”线程,用于提供“waitFor”功能并帮助清理流线程。 我建议至少在单独的线程中读取输入和错误流,因为这允许您在不阻塞当前线程上下文的情况下监视进程。 如果你想等待进程退出,你应该使用Process.waitFor() (进程由ProcessBuilder.start()方法返回给你)。 这将等待进程退出。 此方法将返回进程的退出代码,这对于响应进程可能想要告诉您的错误很有用。 好吧,简而言之…… ProcessBuilder pb

2021-09-25 17:38:07    分类:技术分享    java   shell   processbuilder

使用 Java 中的进程构建器生成多个进程(Spawning multiple process using process builder from Java)

问题 我正在开发一个 Web 应用程序,其中使用 Java 作为前端,使用 shell 作为后端。 我在 shell 中处理大量文件 .. 例如,如果我必须处理 100 个文件。 我计划从 Java 应用程序生成 4 个子进程。 我阅读了有关流程生成器的信息。 但是我不清楚如何使用 start() 方法生成多个进程,然后等待所有进程完成并再次继续处理。 任何与此相关的想法对我都非常有用。 谢谢你。 回答1 一般来说, start 会代表你调用Runtime.exec(...) 。 一旦运行(在它自己的小进程中关闭),您可以通过进程输入和输出流与它交互。 在我自己的工作中,我监控输入和错误流。 为此,我为每个流生成一个新线程并通过stream.read()方法监视stream.read()并查找 -1 的返回结果以确定流何时完成。 我使用第三个“监视器”线程,用于提供“waitFor”功能并帮助清理流线程。 我建议至少在单独的线程中读取输入和错误流,因为这允许您在不阻塞当前线程上下文的情况下监视进程。 如果你想等待进程退出,你应该使用Process.waitFor() (进程由ProcessBuilder.start()方法返回给你)。 这将等待进程退出。 此方法将返回进程的退出代码,这对于响应进程可能想要告诉您的错误很有用。 好吧,简而言之…… ProcessBuilder pb

2021-09-25 17:36:08    分类:技术分享    java   shell   processbuilder

How come using ./shell.sh get error but . shell.sh works

a shell script: VAR=(aa bb cc) for i in "${VAR[@]}" do echo $i; done when run it using . ar_test.sh, it works. zhangyf@zhangyf-desktop:~/test$ . ar_test.sh aa bb cc but fails in this way, zhangyf@zhangyf-desktop:~/test$ ./ar_test.sh ./ar_test.sh: 9: Syntax error: "(" unexpected There are other lines in the file, so line 9 is actually VAR=(aa bb cc). I know the difference is that the latter forks a new shell process while the former ones run the script in the current shell, but why does the result differs so much?

2021-09-25 16:47:55    分类:问答    linux   bash   shell

Spawning multiple process using process builder from Java

I am developing a web application in which I am using Java as my front end and shell as my back end . I am processing lot of files in shell .. for instance if I have to process 100 files . I am planning to spawn 4 sub processes from Java application. I read about process Builder . But I am not getting a clear idea of how to use the start() method to spawn multiple processes and then wait for all of them until it is done and again continuing processing . Any ideas reagrding this would be highly useful to me. Thank you.

2021-09-25 16:47:24    分类:问答    java   shell   processbuilder

export doesn't work in a background process

pipe.sh export START=100 . ./other.sh & wait other.sh sleep 5 export END=200 But I don't see the variable END in export -p. If I source other.sh in the foreground it works though. export START=100 . ./other.sh How do I export variables from background process? Any work arounds?

2021-09-25 05:48:47    分类:问答    bash   shell

Cannot run shell (which) command in PHP code

So I am working with Flyway and I run specific commands using PHP exec() function: exec('/path/absolute/flyway info'); These commands work as long as I specify the absolute path, but that may vary depending on the machines that it will be working on. That is why I want to use a variable which determines that absolute path, through the command exec('which flyway'). The thing is that this returns a null value, even though when I write it directly in shell I get the desired result. I also tried using the php interactive shell php -a, where if I run the command echo exec('which flyway') it also

2021-09-25 05:34:55    分类:问答    php   shell   ssh   flyway

shell scripting using sed

I want to read from standard input, delete all '/', and write the output to standard output. So, a file that contain: /ab1/1a6/ 17 /a/b/1 will have output: ab11a6 17 ab1 I think it should be something like this: read input sed -r 's/\/[^\/]*\/[^\/]*\/.*/"I not sure what do I need to put in here"/g' echo $input I don't really know what do I need to put the the "replace" section. any suggestion?

2021-09-25 05:12:40    分类:问答    shell