我有几个列表,想对它们运行一些命令。由于列表很长,我想并行运行这些命令,因此使用nohup
.
对于我尝试echo
包含 nohup 命令的循环的每个项目,但它不起作用 -cat another_list_of_names
读取到 stdout,但不读取到./tools
. First cat
infor a in $(cat list_of_names)
将列表发送到循环,但echo
'edfor b in $(cat another_list_of_names)
将其发送到 stdout。
如何设置并行运行的 nohup 命令(是否可以nohup
使用echo
)?
for a in $(cat list_of_names)
do
ID=`echo $a`
mkdir ${ID}
echo "
nohup sh -c '
for b in $(cat another_list_of_names)
do
./tools $b $a >> ${ID}/output
done' &
"
done
Run Code Online (Sandbox Code Playgroud) 有人可以帮助我理解这一点。
echo $?
- 我知道它输出某种变量......
和这个
ls >> $File 2>&1
---- 有人能解释一下这是做什么的吗?
一个偶然的机会,我产生了命令echo #a
, where a=house
。这个命令的结果是空白,所以我很好奇开始搜索,但什么也没找到。那么,为什么#a
评估为空字符串?
附加一个包含tee
命令和日志文件名的变量,没有得到预期的结果,因为echo
正在打印变量内容。
以下是文件内容、实际输出和预期结果。
shell脚本内容:
#!/bin/bash
log="2>&1 | tee -a report.txt"
echo ""
echo '***************-:START OF THE REPORT:-***********' $log
Run Code Online (Sandbox Code Playgroud)
运行脚本后。
console op:
***************-:START OF THE REPORT:-*********** 2>&1 | tee -a report.txt
Run Code Online (Sandbox Code Playgroud)
预期的-
console op:
***************-:START OF THE REPORT:-***********
report.txt file content:
***************-:START OF THE REPORT:-***********
Run Code Online (Sandbox Code Playgroud)
另请注意,变量$log
应包含tee
命令和文件名,因为我不想tee
在每个 echo 命令的末尾对命令进行硬编码。
在这里按预期剪切工作
$ cat test
1;2;3;4
$ cut -d ';' -f 2 test
2
$ cut -d ';' -f 3 test
3
Run Code Online (Sandbox Code Playgroud)
但我希望它在这里输出“21”,我做错了什么?
$ updates=""
$ echo "$updates" | cat -v
$ updates=$(/usr/lib/update-notifier/apt-check 2>&1);echo $updates
21;0
$ echo "$updates" | cat -v
21;0
$ updates=""
$ updates=$(/usr/lib/update-notifier/apt-check 2>&1);echo $updates |
cut -d ";" -f 1
21
$ echo "$updates" | cat -v
21;0
Run Code Online (Sandbox Code Playgroud)
当我尝试 Stéphanes 解决方案时
$ cat test2.sh
updates=$(/usr/lib/update-notifier/apt-check)
all=${updates%";"*}
security=${updates#*";"}
printf '%s\n' "$all packages can be updated" \
"$security …
Run Code Online (Sandbox Code Playgroud) 怎么来的
echo `echo "foo"`
Run Code Online (Sandbox Code Playgroud)
有效但
echo `awk '{ print "foo" }'`
Run Code Online (Sandbox Code Playgroud)
不是吗?
我有一个变量 ( var
) 返回值VAR1
($var
具有值VAR1
) 。有一个输入文件,它VAR1
定义了 ( VAR1=ABCDEF
)
如何使用echo
来获取值ABCDEF
使用$var
?
我尝试了echo $(echo $var)
许多其他选项,但我总是得到输出为VAR1
or echo VAR1
but never ABCDEF
。我source
在文件中使用了VAR1
声明,在命令提示符等中尝试过。
我使用\0n
转义序列与echo -e
和printf
其中n是要被打印的ASCII字符的八进制值。当我使用该语句时echo -e "\0101"
,shell 正在打印字符,A
但是当我使用printf "\0101"
shell 时,正在打印1
这是我提供的八进制数的最低有效位,但是如果我0
在开头删除并使用命令,因为printf "\101"
它A
按预期正确打印。所以我的疑问是为什么这个特定的转义序列会有如此大的差异,我尝试了许多其他转义序列,但它们使用 echo 和 printf 都给出了相同的结果。我正在使用Ubuntu
并且目前正在研究bash
.
我试图-e
在 Bash 4 中分配给一个变量。但该变量仍然为空。
例如:
$ var="-e"
$ echo $var
$ var='-e'
$ echo $var
$ var="-t"
$ echo $var
-t
Run Code Online (Sandbox Code Playgroud)
为什么它适用于-t
,但不适用-e
?
该echo
命令根据传递给它的表达式输出不同的结果。工作目录是/home/etc
$ echo .*/
/ ../ .cache/ .config/ .gnupg/ .local/ .mozilla/ .ssh/
$ echo ./*
./Desktop ./Documents ./Downloads ./Music ./Pictures ./Public ./snap ./Templates ./Videos
$ echo .*/*
.cache/event-sound-cache.tdb.d410907cf15246578458d0ad7919eb5e.x86_64-pc-linux-gnu .cache/evolution .cache/fontconfig .cache/gnome-screenshot .cache/gnome-software .cache/gstreamer-1.0 .cache/ibus .cache/ibus-table .cache/libgweather .cache/mesa_shader_cache .cache/mozilla .cache/thumbnails .cache/ubuntu-report .cache/update-manager-core .cache/wallpaper .config/dconf .config/enchant .config/eog .config/evolution .config/gedit .config/gnome-initial-setup-done .config/gnome-session .config/goa-1.0 .config/gtk-3.0 .config/ibus .config/nautilus .config/pulse .config/rclone .config/update-notifier .config/user-dirs.dirs .config/user-dirs.locale ./Desktop ./Documents ./Downloads .gnupg/private-keys-v1.d .gnupg/pubring.kbx .gnupg/trustdb.gpg .local/share .mozilla/extensions .mozilla/firefox .mozilla/systemextensionsdev ./Music ../ec ./Pictures ./Public ./snap ./Templates ./Videos
$ echo …
Run Code Online (Sandbox Code Playgroud)