我在Bash中调用了一个脚本Script.sh
,它需要知道自己的PID(即我需要在Script.sh中获取PID)
知道怎么做吗?
我想实现一个进度条,显示bash中经过的秒数.为此,我需要擦除屏幕上显示的最后一行(命令"clear"擦除所有屏幕,但我只需要擦除进度条的行并将其替换为新信息).
最终结果应如下所示:
$ Elapsed time 5 seconds
Run Code Online (Sandbox Code Playgroud)
然后在10秒后我想通过以下方式替换这句话(在屏幕中的相同位置):
$ Elapsed time 15 seconds
Run Code Online (Sandbox Code Playgroud) 在我看来,它们都存储了所有命令行参数.
两者之间有区别吗?
如何tail
在Bash shell下使用最后一个非空行?
例如,my_file.txt
看起来像这样:
你好
hola
bonjour
(空行)
(空行)
显然,如果我这样做,tail -n 1 my_file.txt
我会得到一个空行.就我而言,我想得到bonjour
.我怎么做?
我想将元素的不透明度设置为0.现在,如果我这样做,元素的所有内容将继承此属性.我不想要这个,我只想让背景获得不透明度0而内容(例如文本)保持可见
有线索吗?
谢谢.
我有一个由主要脚本控制的脚本集合.我想在主脚本中捕获信号ctrl+ c并将其传播给其他人.其他脚本也应该捕获此信号(从主脚本)并进行一些清理......
我试图发送kill -s SIGINT
给孩子们,但他们似乎无法捕捉到信号(即使trap 'Cleanup' SIGINT
是在儿童脚本上定义的)
任何线索如何实现这一点?
我正在编写将并行运行的脚本,并将从同一个文件中获取输入数据.这些脚本将打开输入文件,读取第一行,存储它以供进一步处理,最后从输入文件中擦除此读取行.
现在问题是访问文件的多个脚本可能导致两个脚本同时访问输入文件并读取同一行的情况,这会产生两次处理行的不可接受的结果.
现在一个解决方案是.lock_input
在访问输入文件之前编写一个锁文件(),然后在释放输入文件时将其擦除,但是这种解决方案在我的情况下并不吸引人,因为有时NFS会随机减慢网络通信速度并且可能没有可靠的锁定.
另一种解决方案是放置进程锁而不是编写文件,这意味着访问输入文件的第一个脚本将启动一个名为lock_input的进程,其他脚本将启动ps -elf | grep lock_input
.如果它出现在进程列表中,它们将等待.这可能比写入NFS更快,但仍然不是完美的解决方案......
所以我的问题是:是否有任何bash命令(或其他脚本解释器)或我可以使用的服务,其行为类似于线程编程中用于同步的信号量或互斥锁?
谢谢.
小粗略的例子:
假设我们有input_file如下:
Monday Tuesday Wednesday Thursday Friday Saturday Sunday
治疗脚本:TrScript.sh
#!/bin/bash
NbLines=$(cat input_file | wc -l)
while [ ! $NbLines = 0 ]
do
FirstLine=$(head -1 input_file)
echo "Hello World today is $FirstLine"
RemainingLines=$(expr $NbLines - 1 )
tail -n $RemainingLines input_file > tmp
mv tmp input_file
NbLines=$(cat input_file | wc -l)
done
Run Code Online (Sandbox Code Playgroud)
主要脚本:
#! /bin/bash
./TrScript.sh &
./TrScript.sh &
./TrScript.sh &
wait
Run Code Online (Sandbox Code Playgroud)
结果应该是:
Hello …