Bash-在后台运行程序仍然会导致脚本等待
我为我最喜欢的编辑器nedit编写了一个简单的包装器脚本。它将获取一个参数列表,并在一个窗口中打开所有非gzip文件,它将获取每个gzip文件,并将它们转换为一个临时文件,然后在单独的窗口中打开这些文件。但是,运行Bash-在后台运行程序仍然会导致脚本等待,bash,Bash,我为我最喜欢的编辑器nedit编写了一个简单的包装器脚本。它将获取一个参数列表,并在一个窗口中打开所有非gzip文件,它将获取每个gzip文件,并将它们转换为一个临时文件,然后在单独的窗口中打开这些文件。但是,运行nedit会导致脚本等待窗口关闭,即使我使用&或nohup。我是不是遗漏了什么 #!/bin/bash declare -a nongzipped for file in $@; do if file $file | grep -q gzip; then ti
nedit
会导致脚本等待窗口关闭,即使我使用&
或nohup
。我是不是遗漏了什么
#!/bin/bash
declare -a nongzipped
for file in $@; do
if file $file | grep -q gzip; then
timestamp=$(date +"%F_%T")
tempfile="tmp_$timestamp"
$( zcat $file > $tempfile )
$( nedit -background lightskyblue3 $tempfile & )
$( rm $tempfile )
else
nongzipped+=("$file")
fi
done
if [ ${#nongzipped[@]} -ne 0 ]; then
$( nedit ${nongzipped[@]} & )
fi
您真的需要这里的$(命令)
?此语法通常用于获取命令的输出并将其分配给变量。这可能就是脚本必须等待的原因
您最好在不使用任何特殊语法的情况下调用您的程序,只需程序arg1 arg2&
此处是否确实需要$(命令)
?此语法通常用于获取命令的输出并将其分配给变量。这可能就是脚本必须等待的原因
您最好在不使用任何特殊语法的情况下调用您的程序,只需程序arg1 arg2&
命令替换所导致的shell在后台作业完成之前无法退出。(将sleep&
与$(sleep&)
进行比较)无论如何,您都不需要它们,所以只需删除它们即可
if file $file | grep -q gzip; then
timestamp=$(date +"%F_%T")
tempfile="tmp_$timestamp"
zcat $file > $tempfile
nedit -background lightskyblue3 $tempfile &
rm $tempfile
else
nongzipped+=("$file")
fi
在后台作业完成之前,由命令替换$(…)
生成的shell无法退出。(将sleep&
与$(sleep&)
进行比较)无论如何,您都不需要它们,所以只需删除它们即可
if file $file | grep -q gzip; then
timestamp=$(date +"%F_%T")
tempfile="tmp_$timestamp"
zcat $file > $tempfile
nedit -background lightskyblue3 $tempfile &
rm $tempfile
else
nongzipped+=("$file")
fi
您过度使用命令替换;它们只是捕获命令输出所必需的,而不是简单地运行命令;它们只是捕获命令的输出所必需的,而不是简单地运行命令。我想我不知道什么时候使用反勾号或命令替换。我的印象是,在shell脚本中,您需要使用反勾号或命令替换来运行外部程序,如ls
、rm
、或zcat
。不,只有当您想将输出捕获为字符串时才需要它们。例如,result=$(some_command arg1 arg2)
将some_command
的输出存储在变量result
中,而some_command“$(other_command)”
捕获other_command
的输出,用作some_command
的参数。(some_command other_command
,另一方面,会传递文本字符串“other_command”作为参数。)我想我不明白什么时候使用反勾号或命令替换。我的印象是,在shell脚本中,您需要使用反勾号或命令替换来运行外部程序,如ls
、rm
、或zcat
。不,只有当您想将输出捕获为字符串时才需要它们。例如,result=$(some_command arg1 arg2)
将some_command
的输出存储在变量result
中,而some_command“$(other_command)”
捕获other_command
的输出,用作some_command
的参数。(另一方面,some_command other_command
将传递文本字符串“other_command”作为参数。)