以下命令在命令行中运行
rsync -avh -r /Source/09_03_2016/ /Destination/
echo $(basename !:3)
Run Code Online (Sandbox Code Playgroud)
输出 09_03_2016
但是当我在 shell 脚本中执行此操作时,它不起作用
#! /bin/bash
/usr/bin/rsync -avh -r /Source/09_03_2016 /Destination/;
echo $(basename !:3)
Run Code Online (Sandbox Code Playgroud)
输出!:3
首先,它不像这个问题\n如何在 bash \xe2\x80\x9cuntouched\xe2\x80\x9d 中回显带有多个空格的字符串?[重复]因为在那个问题中他只想打印它,我想将它分配给变量并保存它。\n我已经尝试过这个:
\n\nSPACE=\' \'\nVAR="$VAR1${SPACE}$VAR2"\nRun Code Online (Sandbox Code Playgroud)\n 我有以下代码:
testval="aaa_bbb_ccc,"
testval+="_ddd"
echo ${testval}
Run Code Online (Sandbox Code Playgroud)
但是,我需要去掉“ ccc ”后面的逗号。${testval}在我添加“ _ddd ”之前,它将始终是最后一个字符。可能还有其他逗号需要保留在字符串中。
但到目前为止,我找不到任何有效的方法。
例如
testval="aaa_bbb_ccc," ;
testval=${testval} | rev | cut -c 2- | rev ; testval+="_ddd" ;
echo ${testval}
Run Code Online (Sandbox Code Playgroud)
或者
testval="aaa_bbb_ccc," ;
testval=${testval} | sed 's/.$//' ; testval+="_ddd" ;
echo ${testval}
Run Code Online (Sandbox Code Playgroud)
两者都导致:
aaa_bbb_ccc,_ddd
Run Code Online (Sandbox Code Playgroud)
我也试过:
testval="aaa_bbb_ccc," ;
testval=$(${testval} | rev | cut -c 2- | rev) ;
testval+="_ddd" ;
echo ${testval}`
Run Code Online (Sandbox Code Playgroud)
和
testval="aaa_bbb_ccc," ;
testval=$(${testval} | sed 's/.$//') ;
testval+="_ddd" ;
echo ${testval}
Run Code Online (Sandbox Code Playgroud)
两者都导致:
-su: {testval}: command not found**
Run Code Online (Sandbox Code Playgroud)
没有等效的或 …
我有一个带有此代码的脚本
for i in {2..9}
do
grep "Node${i}\|01, source address = 00:00:00:00:00:0${i}" t1.txt > t2.txt
done
Run Code Online (Sandbox Code Playgroud)
是否可以将循环从“9”扩展到十进制 MAC 地址的“f”字符,以便处理“a”到“f”的情况?
我会尽量保持简单。我使用sed命令编辑流的结果如下:
filename_1
filename_2
.
.
filename_n
Run Code Online (Sandbox Code Playgroud)
现在根据上一个结果中的文件数量,我想在 shell 中执行命令,如下所示。
some_command --foo "filname_1" --foo "filename_2" --foo "filename_n" remaining_some_command
Run Code Online (Sandbox Code Playgroud)
其中 --foo 是命令和 filename_1...filename_n 之间的标志,它的值取决于sed.
在shell中应该是可能的。但是如何?
我有以下代码
printf "%8s.%s\n" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM"
Run Code Online (Sandbox Code Playgroud)
这产生了预期的输出
24756.22971
9910.13045
7701.30924
22972.27622
Run Code Online (Sandbox Code Playgroud)
我想用变量中的前导空格保存此输出,以供以后使用
printf -v output "%8s.%s\n" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM"
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试打印/回显变量 $output,前导空格就会消失:
24756.22971
9910.13045
7701.30924
22972.27622
Run Code Online (Sandbox Code Playgroud) 我想在脚本开始时询问用户 sudo 密码,然后在运行脚本的其余部分之前测试该密码是否正确。
经过一段时间的搜索,我得到了这个测试脚本:
SUDO_PWD=whatever
sudo -k # <- So I can test it
echo $SUDO_PWD | sudo -Svp '' 2>/dev/null
sudo_response=$(SUDO_ASKPASS=/bin/false sudo -A whoami @>/dev/null)
if [ "$sudo_response" = "root" ]; then
echo "sudo"
else
echo "no sudo"
fi
Run Code Online (Sandbox Code Playgroud)
但是,即使使用 @>/dev/null 重定向,这两条消息也会出现在控制台中。为什么 ?
因此,假设我想删除重复行而不进行排序,就像在这个线程中一样,但我也想删除不区分大小写的重复行,而不事先将所有字符串转换为大写或小写,并保留第一个结果的大小写。我怎样才能做到这一点?
我有一个带有 path 的变量/usr/apps/app1/home/usera/run/10/_tmp/folder1/folder1。如何/usr/apps/app1/home/usera/run/10/_tmp在shell脚本中提取?
我\xe2\x80\x99m编写了一个名为video2png的简单bash脚本,使用ffmpeg将视频的某些帧转换为png:
#!/bin/bash\nffmpeg -ss 30:00 -i "$1" -frames 1 -s 1280x880 -f image2 "$2"\nRun Code Online (Sandbox Code Playgroud)\n我将视频路径和所需的输出路径作为第一个和第二个参数传递给脚本。正如您在脚本中看到的,我通过"$1"和获得了这两条路径"$2"。\n我在 Mac 上的终端中运行该脚本,如下所示:
Path1="/Users/jintai/Downloads/demon/a b/demon.mp4"\nPath2="/Users/jintai/Downloads/demon/a b/demon.png"\nbash video2png "$Path1" "$Path2" \nRun Code Online (Sandbox Code Playgroud)\n-frames但是,脚本中的标志参数似乎ffmpeg被误解为视频路径下的文件,因为我收到以下错误消息:
Trailing option(s) found in the command: may be ignored.\n-frames: No such file or directory\nRun Code Online (Sandbox Code Playgroud)\n我该如何解决这个问题?感谢您的时间和建议!
\n编辑:根据@muru的建议,我用-xafter运行我的脚本bash。但问题仍然在这里。这是我的运行和所有输出:
(base) jintai@192 missing % bash -x video2png "$Path1" "$Path2" \n+ ffmpeg -ss 30:00 -i -frames 1 -s …Run Code Online (Sandbox Code Playgroud)