我想编写尽可能自我记录的 bash 脚本。
我有一个想法,当我执行带有大量标志的软件时,我想将命令分成多行,并在每行末尾添加注释,说明标志的作用(来自手册页的信息),就像这样:
bwa aln \
-n $n \ # -n max #diff (integer) or missing prob under 0.02 err rate (float) [0.04]
-o $o \ # -o maximum number or fraction of gap opens [1]
-e $e \ # -e maximum number of gap extensions, -1 for disabling long gaps [-1]
-i $i \ # -i do not put an indel within integer bp towards the ends [5]
-d $d \ # -d maximum occurrences for extending a …Run Code Online (Sandbox Code Playgroud) 有没有办法用额外的标志重复你的最后一个命令?
例子:
说我这样做:
rm myFavouriteDirectory
Run Code Online (Sandbox Code Playgroud)
我会得到回复:
rm: myFavouriteDirectory/: is a directory
Run Code Online (Sandbox Code Playgroud)
显然我的意思是:
rm -rf myFavouriteDirectory
Run Code Online (Sandbox Code Playgroud)
有没有办法用标志!! -rf(这不起作用)重复最后一个命令
有没有办法可以查看命令行的所有过去活动/记录,例如浏览器中的“历史”功能?
一点背景我使用 OSX 终端与命令行交互。
我有一个脚本可以启动 Firefox 4 秒,然后杀死它。Firefox 会自动登录强制门户,所以只要 wifi 连接,我只需要打开它 4 秒钟。我在 Ubuntu 13.04 上。
我的问题似乎是没有设置 $pid 。
firefox ; pid=$!
sleep 4
kill $pid
Run Code Online (Sandbox Code Playgroud)
编辑:删除集,现在它给了一个无效的 pid。
我有一个只包含一行的文件
$> cat file.txt
apple,orange,cat,dog
Run Code Online (Sandbox Code Playgroud)
我需要给它附加两个 String 并将它分配给一个变量,一个在前面,另一个在最后,这样它就变成了:
var=key,apple,orange,cat,dog,ending
Run Code Online (Sandbox Code Playgroud)
这样我就可以在其他地方使用 $var ...
我可以知道我怎么能在 bash 脚本中做到这一点吗?或者任何linux命令都可以做到这一点?谢谢。
我有一个需要 root 权限的脚本。我必须通过 sudo 或从 uid 0 的帐户(例如 root)执行它。
如果脚本没有以足够的权限执行,那么我希望该脚本回显“以 Root 身份运行”并退出 1。
我怎样才能做到这一点?
如何计算pdf文件中的行数?最好从 linux 命令行 ( bash)?
pdf我要分析的s 是使用 LaTeX 生成的,因此任何在 tex 源上工作的解决方案都可以(只要结果与手动计算 pdf 时的结果相同,并且不会修改生成的 pdf)。
我为我的 OS X 终端编写了这个漂亮而多彩的提示:
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ [\1]/'
}
export PS1="\e]2;\w\a\e[1;30;1m\][\u@\[\033[0;36m\]\h\e[1;30;1m\]:\[\033[0;35m\]\w\e[1;30;1m\]] \[\033[0;31m\](\t) \[\033[0;33m\]\$(parse_git_branch)\n\[\033[0m\]\e[1;30;1m\]\$\[\e[0m\]"
Run Code Online (Sandbox Code Playgroud)
我source ~/.bash_profile它,它工作正常。除了当我使用向上箭头浏览历史时,我会发生一件奇怪的事情。
基本上是source ~/.bash_profile历史命令的开头,成为提示的一部分。当我ctrl+c或enter它恢复正常时,但只要我看到source命令的历史记录,提示就会再次更改。
这是我看过历史然后ctrl+u输入的示例ls:
[user@host:~/Documents] (14:01:40) [branch]
$source ~/.ls
Run Code Online (Sandbox Code Playgroud)
关于这个的任何线索?
我已经安装了fish shell,我对它非常满意......但我无法运行以下命令:
make && make install
Run Code Online (Sandbox Code Playgroud)
这在 bash 中工作得很好......我如何在鱼壳中运行它?
我对 shell 脚本知之甚少,但不幸的是我必须编写一个。我想问一下bash脚本迭代移动文件,我需要移动按月排序的日志文件,这些文件将由cronjob执行。计划是将 mtime +30(1 个月前)文件移动到几个文件夹中,cronjob 将每天执行,例如:
/home/Work/LogFiles/20131200012.log
/home/Work/LogFiles/thisLogIsDifferent.log
/home/Work/LogFiles/20120322222.log
/home/Work/LogFiles/20140100011.log
/home/Work/LogFiles/thisLogIsDifferent2.log
Run Code Online (Sandbox Code Playgroud)
/home/Work/LogFiles/thisLogIsDifferent.log
/home/Work/LogFiles/thisLogIsDifferent2.log
/home/Work/LogFiles/2013/DEC/20131200012.log
/home/Work/LogFiles/2012/MAR/20120322222.log
/home/Work/LogFiles/2014/JAN/20140100011.log
Run Code Online (Sandbox Code Playgroud)
我对我必须使用的方法一无所知。所以这是我糟糕的 shell 脚本:
BASE_DIR=/home/Work/LogFiles
REPORT_DIR_YEAR=$BASE_DIR/`date +%Y`
REPORT_DIR=$REPORT_DIR_YEAR/`date +%b`
NOW=$(date +"%Y%m")
if ! [ -d $REPORT_DIR_YEAR ]; then
mkdir $REPORT_DIR_YEAR
if ! [ -d $REPORT_DIR ]; then
mkdir $REPORT_DIR
fi
fi
#THIS PART NEED TO BE RE-ARRANGED
#What I expect is not date=NOW; BUT SOME KIND LIKE date %m-1? but I still don't have any ideas about modify date function.
for file …Run Code Online (Sandbox Code Playgroud) bash ×10
linux ×4
command-line ×2
fish ×1
latex ×1
macos ×1
pdf ×1
privileges ×1
productivity ×1
root ×1
shell-script ×1
string ×1
terminal ×1
unix ×1