当命令是if语句的一部分时,如何在shell中的多行上拆分命令?
这有效:
if ! fab --fabfile=.deploy/fabfile.py --forward-agent --disable-known-hosts deploy:$target; then rc=1
fi
Run Code Online (Sandbox Code Playgroud)
这不起作用:
# does not work:
if ! fab --fabfile=.deploy/fabfile.py \
--forward-agent \
--disable-known-hosts deploy:$target; then
rc=1
fi
Run Code Online (Sandbox Code Playgroud)
而不是整个命令执行,我得到:
./script.sh: line 73: --forward-agent: command not found
Run Code Online (Sandbox Code Playgroud)
更重要的是,我对Bash的理解中缺少哪些内容可以帮助我理解未来的类似问题?
在Linux上,该readlink实用程序接受一个-f跟随其他链接的选项.这似乎不适用于Mac和可能基于BSD的系统.相当于什么?
这是一些调试信息:
$ which readlink; readlink -f
/usr/bin/readlink
readlink: illegal option -f
usage: readlink [-n] [file ...]
Run Code Online (Sandbox Code Playgroud) 这个
STR="Hello\nWorld"
echo $STR
Run Code Online (Sandbox Code Playgroud)
产生输出
Hello\nWorld
Run Code Online (Sandbox Code Playgroud)
代替
Hello
World
Run Code Online (Sandbox Code Playgroud)
如何在字符串中添加换行符?
注意:这个问题不是关于回声.
我知道echo -e,但我正在寻找一种解决方案,允许将一个字符串(包括换行符)作为参数传递给其他命令,这些命令没有类似的选项来解释\n为换行符.
我正在尝试检查文件是否存在,但是使用通配符.这是我的例子:
if [ -f "xorg-x11-fonts*" ]; then
printf "BLAH"
fi
Run Code Online (Sandbox Code Playgroud)
我也尝试过没有双引号.
我有一个shell脚本,我想运行而不使用"sh"或"bash"命令.例如:
代替: sh script.sh
我想用: script.sh
我怎样才能做到这一点?
PS(i)我不太使用shell脚本,我尝试阅读别名,但我不明白如何使用它们.
(ii)我还阅读了关于将脚本与PATH变量中的另一个文件相关联的内容.我正在使用我的大学服务器,但我没有权限在这些位置创建文件.
要将命令的输出存储为sh/ksh/bash中的变量,您可以执行任一操作
var=$(command)
Run Code Online (Sandbox Code Playgroud)
要么
var=`command`
Run Code Online (Sandbox Code Playgroud)
两种方法之间有什么区别?
我有一个ksh脚本,它返回一长串值,换行符分隔,我想只看到唯一/不同的值.有可能这样做吗?
例如,假设我的输出是目录中的文件后缀:
Run Code Online (Sandbox Code Playgroud)tar gz java gz java tar class class
我希望看到如下列表:
Run Code Online (Sandbox Code Playgroud)tar gz java class
我试图在一个调用shell脚本的docker容器中运行一个cronjob.
昨天我一直在网上搜索和堆栈溢出,但我真的找不到一个有效的解决方案.
我怎样才能做到这一点?
编辑:
我创建了一个(注释的)github存储库,其中包含一个工作的docker cron容器,它以给定的时间间隔调用shell脚本.
I am running Ubuntu on computer 1 and computer 2. I compiled a C++ program on computer 1, and I can execute it from the terminal using ./program_name. It runs fine.
However, when I try to do this on computer 2, it says: bash: ./program_name: permission denied
What's wrong and what can I do about it?
我正在尝试在bash heredoc中插入变量:
var=$1
sudo tee "/path/to/outfile" > /dev/null << "EOF"
Some text that contains my $var
EOF
Run Code Online (Sandbox Code Playgroud)
这不符合我的预期(按$var字面意思处理,不进行扩展).
我需要使用,sudo tee因为创建文件需要sudo.做类似的事情:
sudo cat > /path/to/outfile <<EOT
my text...
EOT
Run Code Online (Sandbox Code Playgroud)
不起作用,因为>outfile在当前shell中打开文件,而不使用sudo.