当我在 ubuntu 12.04 中登录 shell 时,我总是可以看到此消息
Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-29-generic x86_64)
* Documentation: https://help.ubuntu.com/
System information as of Wed Dec 19 13:41:52
System load: 0.73 Processes: 133
Usage of /: 37.5% of 81.73GB Users logged in: 0
Memory usage: 3%
Swap usage: 5%
Graph this data and manage this system at https://landscape.canonical.com/
Last login: Wed Dec 19 13:36:52 2012 from
Run Code Online (Sandbox Code Playgroud)
哪里可以找到脚本?
注意:我已经看过了
但我还没有找到
正如我们许多人肯定知道的那样,让您的程序接受 stdin 输入总是一个好主意。很多程序确实允许使用 *nix 环境。这让我们可以做一些很酷的事情,比如管道
echo "foo" | less。很多时候人们会发现这cat barfile | baz在逻辑上等同baz barfile于在幕后它只是读取字符串。
如今,有更多的程序默认无法通过管道传输。一些程序具有仍然允许上述行为的标志,但许多程序没有。
现在,我的问题是,是否存在临时文件管道?
现在,由于我几乎不具备编写 Bash 的能力和在 Google 上大约 5 分钟的时间,我想出了这个
#!/bin/bash
if [ $# -ne 2 ]; then exit 1; fi
f=$(mktemp)
($1) > $f
if [ $? -eq 0 ]; then ($2 $f); else exit $?; fi
rm $f
Run Code Online (Sandbox Code Playgroud)
调用这个 fpipe,我们可以做一些事情,比如fpipe 'wget -O- www.example.com' bazbaz 是一个我们不能管道但可以做的程序baz file。
我的问题是我们怎样才能做得更好。我怀疑有了更多的 Bash 知识,重新编写上面的脚本来接受任何数量的参数将是相当微不足道的(这样我们就可以做一些事情,比如fpipe 'foo x' bar baz在管道中我们可以做类似的事情foo x …
出于某种原因,此脚本为每个原件输出三个文件,而不是一个。
一定犯了一些小错误 - 我是新手!
如果有人能解释为什么会发生这种情况,我将非常感激。
脚本:-
for f in *.txt
do
noOfRows=$(cat $f | wc -l)
relevantRows=$(expr $noOfRows - 5)
head -n $relevantRows $f | tee ${f%.txt}-Amended.txt
done
Run Code Online (Sandbox Code Playgroud)
ls 命令的结果:-
E12-5_F2_NEG-Amended-Amended-Amended.txt E12-5_M3_POS-Amended-Amended-Amended.txt
E12-5_F2_NEG-Amended-Amended.txt E12-5_M3_POS-Amended-Amended.txt
E12-5_F2_NEG-Amended.txt E12-5_M3_POS-Amended.txt
E12-5_F2_NEG.txt E12-5_M3_POS.txt
E12-5_F2_POS-Amended-Amended-Amended.txt E12-5_M4_NEG-Amended-Amended-Amended.txt
E12-5_F2_POS-Amended-Amended.txt E12-5_M4_NEG-Amended-Amended.txt
E12-5_F2_POS-Amended.txt E12-5_M4_NEG-Amended.txt
E12-5_F2_POS.txt E12-5_M4_NEG.txt
E12-5_F5_NEG-Amended-Amended-Amended.txt E12-5_M4_POS-Amended-Amended-Amended.txt
E12-5_F5_NEG-Amended-Amended.txt E12-5_M4_POS-Amended-Amended.txt
E12-5_F5_NEG-Amended.txt E12-5_M4_POS-Amended.txt
E12-5_F5_NEG.txt E12-5_M4_POS.txt
E12-5_F5_POS-Amended-Amended-Amended.txt E12-5_M7_NEG-Amended-Amended-Amended.txt
E12-5_F5_POS-Amended-Amended.txt E12-5_M7_NEG-Amended-Amended.txt
E12-5_F5_POS-Amended.txt E12-5_M7_NEG-Amended.txt
E12-5_F5_POS.txt E12-5_M7_NEG.txt
E12-5_M3_NEG-Amended-Amended-Amended.txt E12-5_M7_POS-Amended-Amended-Amended.txt
E12-5_M3_NEG-Amended-Amended.txt E12-5_M7_POS-Amended-Amended.txt
E12-5_M3_NEG-Amended.txt E12-5_M7_POS-Amended.txt
E12-5_M3_NEG.txt E12-5_M7_POS.txt
Run Code Online (Sandbox Code Playgroud)
非常感谢,亚当
我正在尝试让 vim 执行我正在使用键映射编辑的脚本,例如ctrl+ x,所以我在vimrc
:map <C-x> :!exec_file %<CR>
要将文件名传递给我编写的脚本,该脚本解析扩展名并调用适当的解释器,到目前为止效果很好。
但是,我想知道是否可以bash使用脚本名称直接调用并执行它,因为我编辑的大多数脚本都有一个 shebang 行,所以我尝试了这个映射:
:map <C-x> :!bash %<CR>
但它不起作用,是否可以通过将其名称传递给 bash 来执行脚本?
我有 100 个文件,n1.txt、n2.txt ……我想对每个文件进行 gzip,但不是在一个文件中——最后我想要 100 个n*.txt.gz文件。
我如何在 Linux 中使用 Bash 做到这一点?
如何禁用.bashrc和.profile,当我登录到Linux用腻子从Windows?
(在* nix: ssh hostname "bash --norc --profile")
我正在尝试将我的工作目录与脚本需要运行的正确目录进行比较。这是shell脚本的片段
CURR_DIR=echo pwd
echo $CURR_DIR
if [ "$CURR_DIR" == "/proj/project_a/scripts_shell" ]; then
echo "You are running script from correct directory"
fi
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我确保我在 /proj/project_a/scripts_shell (作为我目前的工作目录)中,但由于某种原因它无法在 if 语句中检测到这一点。因此它不会打印消息。
这有什么问题?
基本上我这样做:
for i in *.mp4;
do ffmpeg -i "${i}" -vf "movie=logo.png [watermark]; [in][watermark] overlay=10:10 [out]" -strict -2 -qscale 0 "${i}-watermarked.mp4";
done;
Run Code Online (Sandbox Code Playgroud)
但这有效地执行此命令
do ffmpeg -i "video.mp4" -vf "movie=logo.png [watermark];\
[in][watermark] overlay=10:10 [out]" -strict -2 -qscale 0 "video.mp4-watermarked.mp4";
Run Code Online (Sandbox Code Playgroud)
最后一点 - video.mp4-watermarked.mp4 是我的问题。我希望它是 video-watermarked.mp4。
我怎样才能做到这一点 ?
我试图调用ps -o comm:1024 --pid 1391 --cols 1024 -w以获取完整的进程名称(并且仅此而已),但我总是以这个结束
COMMAND
notification-ar
Run Code Online (Sandbox Code Playgroud)
而进程名称是notification-area-applet。我还尝试了 -w、--cols 和 : 格式化程序的所有组合。cmd 和 args 给出进程的完整路径和参数。我也许可以从这些中获取进程名称,但仍然......
我在用户的 .bashrc 文件中定义了一个函数,它在我的命令提示符下显示我当前的 git 分支名称:
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
PS1="\\[$(tput setaf 7)\\]\\w \$(parse_git_branch)> \\[$(tput sgr0)\\]"
Run Code Online (Sandbox Code Playgroud)
当我 sudo 到 su 时,看起来我的 PS1 被结转了,并且在每个命令之后我都会收到错误bash: parse_git_branch: command not found。
我可以更改什么,以便当我对另一个用户 sudo 时,使用其 PS1 而不是我用户的 PS1?
编辑:这似乎只发生在我使用源 Python virtualenv 之后。如果我在获取 virtualenv 之前 sudo su ,则不会发生此错误。