在我的程序中,我需要知道我可以运行的最大进程数.所以我写了一个脚本.当我在shell中运行它但在程序使用时它可以工作system("./limit.sh").我在bash工作.这是我的代码:
#/bin/bash
LIMIT=\`ulimit -u\`
ACTIVE=\`ps -u | wc -l \`
echo $LIMIT > limit.txt
echo $ACTIVE >> limit.txt
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?
我正试图找到$没有遵循的实例!.
这应该必要$,躲过,这是\\$和[^!]逃脱这应该是[^\\!]除非[和]需要转义呢?对这一点不确定 - 对bash还不够了解.
ag "\\$[^\!]"
bash: ^\!: syntax error: operand expected (error token is "^\!")
ag "\\$[^!]"
bash: !]: event not found
ag "\\$[^\\!]"
bash: ^\\!: syntax error: operand expected (error token is "^\\!")
ag "\\$[\\^\\!]"
bash: \\^\\!: syntax error: operand expected (error token is "\\^\\!")
ag "\\$[\^\!]"
bash: \^\!: syntax error: operand expected (error token is "\^\!")
Run Code Online (Sandbox Code Playgroud)
这些没有结果:
ag "\\$\\[\\^\\!\\]"
ag "\\$\\[\\^\\!\\]" …Run Code Online (Sandbox Code Playgroud) 我在Fedora 27下运行Bash 4.4.19,我有一个简单的脚本:
#!/bin/bash
TESTENV="Hello"
echo "$TESTENV"
if [ -v $TESTENV ]; then
echo "Yup"
fi
echo "Done"
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它打印:
Hello
./myscript: line 3: [: Hello: binary operator expected
Done
Run Code Online (Sandbox Code Playgroud)
所以,我将额外的括号添加到第3行,现在看起来像:
if [[ -v $TESTENV ]]; then
Run Code Online (Sandbox Code Playgroud)
但产生:
Hello
Done
Run Code Online (Sandbox Code Playgroud)
是什么赋予了?我希望看到上面一个/两个的"Yup".我试过"$TESTENV"用引号括起来,而且我也尝试过-z运算符 - 但行为是一样的.
当hash()在Python 3中调用method时,我注意到在使用int数据类型但使用stringtype 时,它不会返回长整数。
这应该这样工作吗?如果确实是这种情况,那么int对于具有短哈希值的类型,由于它太短会不会引起冲突?
for i in [i for i in range(5)]:
print(hash(i))
print(hash("abc"))
Run Code Online (Sandbox Code Playgroud)
结果:
0
1
2
3
4
4714025963994714141
Run Code Online (Sandbox Code Playgroud) 我有以下目录结构,我正在尝试创建一个简单的bash脚本,用模式foo*/scripts/*A.txt打印出所有文件(即foo1/scripts/fileA.txt和foo2/scripts/fileA.txt)
$ tree
.
??? bar
? ??? scripts
? ??? fileA.txt
? ??? fileB.txt
??? bash_scrap.sh
??? foo1
? ??? scripts
? ??? fileA.txt
? ??? fileB.txt
??? foo2
??? scripts
??? fileA.txt
??? fileB.txt
Run Code Online (Sandbox Code Playgroud)
我现在创建一个脚本bash_scrap.sh,我想用第一个命令行参数给出的模式打印所有文件名.
$ cat bash_scrap.sh
#!/bin/bash
FILES=$1
for f in $FILES
do
echo "Processing $f file..."
printf "\n\n"
done
Run Code Online (Sandbox Code Playgroud)
当我直接定义FILES并在终端中运行脚本时,我得到了预期的输出
$ FILES=foo*/scripts/*A.txt
$ for f in $FILES; do echo "Processing $f file..."; printf "\n\n"; done
Processing foo1/scripts/fileA.txt file...
Processing foo2/scripts/fileA.txt file...
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试将此作为带有输入模式的脚本运行,它只打印出第一个文件名.
$ ./bash_scrap.sh foo*/scripts/*A.txt …Run Code Online (Sandbox Code Playgroud) 给定两个字符串:
a="hello h"
b=""
Run Code Online (Sandbox Code Playgroud)
在bash 4.2版中,其regex比较结果为true
[[ "${a}" =~ "${b}" ]]
echo $? # 0
Run Code Online (Sandbox Code Playgroud)
在bash 3.2版中,正则表达式的比较结果为false
[[ "${a}" =~ "${b}" ]]
echo $? # 2
Run Code Online (Sandbox Code Playgroud)
编辑:第一个结果在带有4.2.46(2)-发行版bash的linux操作系统上运行,而第二个结果在运行3.2.57(1)-发行版bash的OS Mojave上运行。
由于我对 json 术语不太了解,我举一个例子:
假设我有一个 json:
{
"var1": "foo",
"var2": "bar",
...
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能jq将其转换为:
{
"Variables":
{
"var1": "foo",
"var2": "bar",
...
}
}
Run Code Online (Sandbox Code Playgroud) 我尝试使用以下内容bash来访问文件夹的内容;
test_dir="/some_dir/dir_test"
ssh -t -t user@remote-host "
if [ -d '$test_dir' ]; then
sudo chown -R user:admin '$test_dir'
echo '$test_dir'/*
if [ '$(ls -A $test_dir)' ]; then
sudo rm -rf '$test_dir'/*
echo '$test_dir'/*
fi"
Run Code Online (Sandbox Code Playgroud)
该脚本尝试检查是否/some_dir/dir_test为空,如果不是,则删除该文件夹中的所有文件;但我收到以下错误;
ls: cannot access '/some_dir/dir_test': No such file or directory
/some_dir/dir_test
drwxr-xr-x. 3 sys admin 16 Sep 23 15:03 dir_test
Run Code Online (Sandbox Code Playgroud)
不过,我ssh可以remote-host和ls -A /some_dir/dir_test。
我想知道如何解决它。
我在 SSH 配置中有这个设置( /etc/ssh/sshd_config)
AllowUsers root john
Run Code Online (Sandbox Code Playgroud)
我想添加jane到行尾
AllowUsers root john jane
Run Code Online (Sandbox Code Playgroud)
我试过了
sed -i -e '/AllowUsers/{s/:/ /g;s/.*=//;s/$/ jane/p}' /etc/ssh/sshd_config && cat /etc/ssh/sshd_config
Run Code Online (Sandbox Code Playgroud)
我一直得到这个结果
AllowUsers root john jane
AllowUsers root john jane
Run Code Online (Sandbox Code Playgroud)
为什么会有多余的线?
如果我以某种方式运行该命令两次
我会得到这些结果
AllowUsers root john jane
AllowUsers root john jane
AllowUsers root john jane
AllowUsers root john jane
Run Code Online (Sandbox Code Playgroud)
再次运行 x3 次,将得到这个
AllowUsers root john jane
AllowUsers root john jane
AllowUsers root john jane
AllowUsers root john jane
AllowUsers root john jane …Run Code Online (Sandbox Code Playgroud) expr 不是 Linux 内置命令,为什么 expr $BASHPID 显示当前 shell pid?
太奇怪了!我认为它应该输出子shell pid。
$ type expr
expr is hashed (/usr/bin/expr)
$ echo $$
49207
$ expr $BASHPID
49207
Run Code Online (Sandbox Code Playgroud)