将文件复制cp到可能存在或不存在cp的文件夹时,如何在必要时创建文件夹?这是我尝试过的:
[root@file nutch-0.9]# cp -f urls-resume /nosuchdirectory/hi.txt
cp: cannot create regular file `/nosuchdirectory/hi.txt': No such file or directory
Run Code Online (Sandbox Code Playgroud) @在shell脚本中,一个美元符号后跟一个at符号()意味着什么?
例如:
umbrella_corp_options $@
Run Code Online (Sandbox Code Playgroud) 有人能告诉我是否应该在shell脚本中包含变量的引号?
例如,以下是正确的:
xdg-open $URL
[ $? -eq 2 ]
Run Code Online (Sandbox Code Playgroud)
要么
xdg-open "$URL"
[ "$?" -eq "2" ]
Run Code Online (Sandbox Code Playgroud)
如果是这样,为什么?
如果以下示例将IFS环境变量设置为换行符...
IFS=$'\n'
Run Code Online (Sandbox Code Playgroud)
我知道IFS环境变量是什么,\n字符是什么(换行),但为什么不使用以下形式:(
IFS="\n"哪个不起作用)?
例如,如果我想循环遍历文件的每一行并想要使用for循环,我可以这样做:
for line in (< /path/to/file); do
echo "Line: $line"
done
Run Code Online (Sandbox Code Playgroud)
但是,除非IFS设置为换行符,否则这将无法正常工作.为了让它工作,我必须这样做:
OLDIFS=$IFS
IFS=$'\n'
for line in (< /path/to/file); do
echo "Line: $line"
done
IFS=$OLDIFS
Run Code Online (Sandbox Code Playgroud)
注意:我不需要另一种方式做同样的事情,我已经知道很多其他的...我只是对此感到好奇,$'\n'并想知道是否有人可以给我一个解释.
我只是想了解shell中的以下代码行.它用于获取当前工作目录.我知道$(variable)名称返回变量名称中的值,但$(command)应该返回什么?它在执行命令后返回值吗?在这种情况下,我们可以`用来执行命令.
CWD="$(cd "$(dirname $0)"; pwd)"
Run Code Online (Sandbox Code Playgroud)
在不同版本的shell中也可以从以下代码行获取相同的输出
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
Run Code Online (Sandbox Code Playgroud)
我无法理解的含义$(cd..和$(dirname.
有人可以帮我弄清楚这个命令是如何执行的吗?
我经常遇到$? $0 $1 $2 etc....shell脚本,我知道的是$?返回最后一个命令的退出状态
echo "this will return 0"
echo $?
Run Code Online (Sandbox Code Playgroud)
但其他人做了什么?他们叫什么,还有更多吗?也许就像$ 3 $ 4 $ 5 ...
我正在读" Bash初学者指南 ".它说:
如果第一个字符
PARAMETER是感叹号,则Bash使用由其余部分形成的变量的值作为变量PARAMETER的名称; 然后展开此变量,并将该值用于替换的其余部分,而不是其PARAMETER自身的值.这被称为间接扩张.
给出的例子是:
Run Code Online (Sandbox Code Playgroud)franky ~> echo ${!N*} NNTPPORT NNTPSERVER NPX_PLUGIN_PATH
我在这里不太明白:
从其余部分形成的变量的值
PARAMETER
由于PARAMETER是刚刚!N*的话
其余的
PARAMETER
只是N*.怎么会形成一个变量?Bash在那里搜索了所有可能的命令吗?
我正在尝试将宠物项目转换为TypeScript,似乎无法使用该tsc实用程序来观察和编译我的文件.帮助说我应该使用-w开关,但看起来它无法*.ts以递归方式查看和编译某个目录中的所有文件.这似乎tsc应该能够处理.我有什么选择?
我注意到docker的许多entrypoint.sh脚本都是这样的:
#!/bin/bash
set -e
... code ...
exec "$@"
Run Code Online (Sandbox Code Playgroud)
什么是set -e和exec "$@"为什么?
如何抑制Terminated在bash脚本中终止进程后出现的消息?
我试过了set +bm,但那不起作用.
我知道另一个解决方案涉及呼叫exec 2> /dev/null,但是可靠吗?如何重新设置它以便我可以继续查看stderr?
bash ×8
shell ×7
linux ×3
unix ×3
sh ×2
ash ×1
compilation ×1
cp ×1
docker ×1
ifs ×1
indirection ×1
javascript ×1
ksh ×1
quotes ×1
terminal ×1
typescript ×1
variables ×1