我有一个脚本,如下所示......
顶部的一些函数定义,其中之一是......
function err_out
{
trap 'echo "ERROR in $STEP function. EXITING!";exit 1' ERR
#some more messages
exit 1
}
# Main program starts here
trap 'err_out' ERR
#do something
#call some functions
#call cleanup function
#end of script
Run Code Online (Sandbox Code Playgroud)
当函数中发生一些错误时,它们不会传播,并且 err_out 函数不会被调用。
我也尝试过#!/bin/bash -E;这样,当出现错误时,脚本会退出,但我需要的是将错误正确传播到处理程序。
我想制作一个像这样的外壳管道:
producer | analyser > report.txt
Run Code Online (Sandbox Code Playgroud)
producer并在生成数据(一个大日志文件)时观察输出以进行分析。
我怎样才能做到这一点?
可能的重复:
sudo 权限被拒绝
我需要通过 bash 脚本编辑 /etc/network/interfaces,我正在做如下的事情......
sudo echo something > /etc/network/interfaces
当执行此行时,我收到下面提到的错误:
bash: /etc/network/interfaces: Permission denied
但是如果我用某个编辑器编辑同一个文件,它可以完美地工作......即
sudo nano /etc/network/interfaces
上面让我编辑这个文件。
我想使用以下命令将电子书从 epub 格式转换为 mobi 格式:
calibre-convert books/*.epub books/*.mobi
但我想为所有文件保留相同的文件名。所以 book1.epub 将创建 book1.mobi book2.epub 将在转换后创建 book2.mobi。这在命令行中可行吗?还是我必须写一个 bash 脚本?
me@me:~$ ps aux | grep -i firefox
me 15413 0.0 0.0 14428 1036 pts/1 S+ 05:46 0:00 grep --color=auto -i firefox
me@me:~$ kill 15413
bash: kill: (15413) - No such process
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况,或者我做错了什么?
我正在尝试获取有关给定目录树中所有文件类型的信息。file在当前目录中运行效果很好,但它不会遍历子目录,而且似乎没有选项可以让它这样做,这对于 UNIX 工具来说似乎很奇怪。
我究竟如何file递归地执行命令,以便它列出给定目录及其子目录中所有文件的文件类型?
我在用户目录中创建了一个 bash 脚本,例如,当执行该脚本时,会显示文本“Hello world”。同时,我希望能够只有我自己(文件的所有者)和我组的帐户才能执行它,其余的都可以读取。因此,我通过 chmod 设置了权限,我以非我组的用户身份登录,转到包含文件的目录,通过 sh 运行它......它突然执行并显示“Hello world”而不是“拒绝访问” ”。但这怎么可能,我不让别人表演?这是什么?这是什么意思?
[user@localhost ~]$ ls -la *.sh
-rwxr-xr-- 1 user users 0 Feb 19 01:21 file.sh
[user@localhost ~]$ sh file.sh
Hello World
[user@localhost ~]$ groups
users wheel
[user@localhost ~]$ su - testu
Password:
[testu@localhost ~]$ groups
testu
[testu@localhost ~]$ cd ../user
[testu@localhost user]$ sh file1.txt
Hello World```
Run Code Online (Sandbox Code Playgroud) 我有一个命令,它输出一些我想传递给另一个命令的参数。但是,当我在子 shell 中运行命令时,输出会受到分词,除非我引用整个内容,在这种情况下,它是单个词。
我希望 subshell 输出拆分单词,但我希望单词拆分尊重引号,但事实并非如此。有什么方法(除了eval)可以将子shell输出拆分为单词但尊重引号?
鉴于args命令定义为
#!/bin/sh -
printf "%d args:" "$#"
printf " <%s>" "$@"
echo
Run Code Online (Sandbox Code Playgroud)
我可以跑
$ args 'foo bar' 'one two'
2 args: <foo bar> <one two>
Run Code Online (Sandbox Code Playgroud)
但我找不到一种方法让子shell 传递 2 个参数。
$ echo "\"'foo bar'\" 'one two'"
"'foo bar'" 'one two'
$ args $(echo "\"'foo bar'\" 'one two'")
4 args: <"'foo> <bar'"> <'one> <two'>
$ args "$(echo "\"'foo bar'\" 'one two'")"
1 args: <"'foo bar'" 'one two'>
Run Code Online (Sandbox Code Playgroud)
当然,我可以使用 eval …
我正在尝试使用 Bash 中的 new-test 编写复合 if 语句。我想检查一个文件是否存在以及其他两个文件是否具有特定内容。当嵌套在测试中时,我的 grep 搜索似乎不起作用。
echo "a" >> file_a
echo "b" >> file_b
echo "c" >> file_c
if [[ -f file_a && \
$(grep -q "b" file_b) && \
$(grep -q "c" file_c) ]]; then
echo "Got 'em"
fi
Run Code Online (Sandbox Code Playgroud) 在 Ruby 中,>> 被称为铲操作符。例如,在 bash 中它叫什么
cat "hello world" >> file.txt
Run Code Online (Sandbox Code Playgroud)
它如何使用正确的命名法解释这是做什么的。我听说它被称为“管道”,但管道是 | 所以我很困惑。
bash ×10
linux ×6
command-line ×3
shell ×2
calibre ×1
file-types ×1
grep ×1
kill ×1
permissions ×1
ps ×1
redirection ×1
shell-script ×1
unix ×1