Questions tagged «bash»

与其他Bourne / POSIX shell相对,GNU的Bourne Again SHell特有的问题。对于一般关于Unix shell的问题,请改用/ shell标记。

2
如何定义我可以在每个目录中使用的符号链接
是否可以设置符号链接,以便我可以project用来指向目录home/me/project,例如?这应该独立于文件系统中的位置。 我想使用诸如之类的命令cd project,nano project/file1.tex等等。 我必须写一个指向所有目录的符号链接吗?
11 bash  symlink 

3
处理Bash用户的是/否响应
我觉得这很愚蠢。我想在我的Bash脚本中接受“是/否,正确/错误”响应: test.sh #!/bin/bash ARGUMENT=$1 echo User passed in $ARGUMENT OPTARG=${ARGUMENT:0:1} if [[ "$OPTARG" -eq 0 ]] || [[ "${OPTARG^^}" == "N" ]]; then echo Decline elif [[ "$OPTARG" -eq 1 ]] || [[ "${OPTARG^^}" == "Y" ]]; then echo Accept else echo Invalid argument fi 以下是一些示例结果: ./test.sh 0 User passed …
11 bash 

6
半异步管
假设我有以下管道: a | b | c | d 我如何可以等待完成c(或b)在sh或bash?这意味着该脚本d可以开始任何时间(和它不是必须等待),但需要完整的输出c正确地工作。 用例是difftool用于git比较图像的。它由调用,git并需要处理其输入(a | b | c部分)并显示比较结果(d部分)。呼叫者将删除a和所需的输入b。这意味着在从脚本返回之前,进程c(或b)必须终止。另一方面,我不能等待,d因为这意味着我正在等待用户输入。 我知道我可以将的结果写入c一个临时文件,或者在中使用FIFO bash。(不过,不确定FIFO是否会有所帮助。)在没有临时文件的情况下是否可以实现此目的sh? 编辑 如果我能以可靠的方式找出c(或b)进程的进程ID,也许就足够了。然后整个管道可以异步启动,我可以等待进程ID。遵循以下原则 wait $(a | b | { c & [print PID of c] ; } | d) 编辑^ 2 我已经找到了解决方案,欢迎提出评论(或更好的解决方案)。
11 bash  shell  pipe  fifo 

1
清除bash中的旧提示行以节省滚动空间
我的终端主题曾经是这样, 但是我认为提示浪费了很多空间。后来我有了一个主意,每次运行命令时都可以清除提示。我正在使用bash,解决方案之一是使用该preexec_invoke_exec功能。 我使用以下命令清除最后一个提示字符: echo -ne "\033[1A\033[K\033[1A\033[K\033[31;1m$ \033[0m" 这样终端很干净 但是现在我的问题是,如果我想在一行中使用多个命令(例如,当我使用)时会出现问题for i in ...。 这是我的.bashrc中函数的完整版本, preexec () { echo -ne "\033[1A\033[K\033[1A\033[K\033[31;1m$ \033[0m"; echo -n "$1"; echo -ne " \033[37;2m["; echo -n "$2"; echo -ne "]\033[0m\n"; } preexec_invoke_exec () { [ -n "$COMP_LINE" ] && return # do nothing if completing [ "$BASH_COMMAND" …
11 bash  shell  terminal  prompt 

4
将功能传递给Bash中的另一个用户?
有什么方法可以将功能从一个用户传递给另一个用户? 例如,我有一个小的Bash脚本,可以作为Root执行: #!/bin/bash user_func(){ whoami exit } su vagrant -c 'user_func' 但是,user_func函数不是为Vagrant用户定义的,仅针对Root的,并且无法执行。 我的另一种选择是有多行 su vagrant -c 'cmd1' su vagrant -c 'cmd2' , etc 或者,执行多个命令,例如:su vagrant -c 'cmd1; cmd2; cmd3;',但是我不希望多余,尤其是当尝试以Vagrant用户身份执行5条以上的命令时。 是否可以从同一脚本中将功能传递给另一个用户(例如,不以其他用户的身份在磁盘上创建脚本,然后执行该生成的脚本)?还是我还有其他选择?
11 bash 

2
为什么进程替换<()与ssh -F不兼容
我有一些无所事事的虚拟机。要登录他们,我发出vagrant ssh命令。我想使用常规ssh命令登录。的vagrant ssh-config输出合适的配置文件 $ vagrant ssh-config Host default HostName 127.0.0.1 User vagrant Port 2201 UserKnownHostsFile /dev/null StrictHostKeyChecking no PasswordAuthentication no IdentityFile /home/cbliard/.vagrant.d/insecure_private_key IdentitiesOnly yes LogLevel FATAL 在文件中输出此配置并与配合使用时ssh -F,一切正常: $ vagrant ssh-config &gt; /tmp/config $ ssh -F /tmp/config default =&gt; logged successfully 使用进程替换运算符&lt;(cmd)阻止创建临时配置文件时,它将失败: $ ssh -F &lt;(vagrant ssh-config) default Can't open …

3
bash:在只读根分区上使用read <<<“ $ VARIABLE”时出现一些问题。任何已知的解决方法?
碰巧的是,我不得不使用我的ATA-ID-to-device-name脚本(在这里找到:https : //serverfault.com/questions/244944/linux-ata-errors-translating-to-a-device-name/ 426561#426561)在只读 /分区上。如果您感到好奇,它是一个Ubuntu恢复控制台,可让您访问/分区,但默认情况下会将其挂载为只读。我对此感到高兴,因为否则我可能永远都不会发现我的脚本由于以下特定行而在R / O系统上的行为异常: IFS=: read HostMain HostMid HostSub &lt;&lt;&lt; "$HostFull" 这并不会在没有写权限的工作。我不会以为它会失败。但是显然,&lt;&lt;&lt;操作员确实需要将一些临时文件写入某个位置。 但是,有什么方法可以避免创建临时文件,或者有什么方法可以指定将文件写入的位置?在Ubuntu恢复控制台中,对/run目录有-非常好-的写权限,如果我能以某种方式“说” read将临时文件写到比平常其他地方的位置,则可以这样做。

2
Shell功能`>(tee tee copyError.txt>&2)的名称是什么?
我需要将stdout和stderr登录到日志文件,但只在屏幕上显示错误消息。我可以这样做: cp -rpv a/* b 1&gt; copyLog.txt 2&gt; &gt;(tee copyError.txt &gt;&amp;2) 这是我在网络上找到的。 我只想知道这&gt;(tee copyError.txt &gt;&amp;2)东西叫什么?我无法使用Google搜索,因为Google会忽略尖括号和括号之类的字符。
11 bash  shell 

4
清除时防止文字/屏幕闪烁
我的脚本做类似: while :; clear do_a_lot_of_output_here sleep 1 done 在执行清除和输出时,是否有任何选项可以防止屏幕闪烁?我想像在watch命令中那样做(但它是用编写的C)。有什么建议吗? clear | hexdump -C 00000000 1b 5b 48 1b 5b 32 4a |.[H.[2J| 00000007 PS。我bash只用。
11 bash 



2
等待X窗口出现/消失(以理智的方式)
在shell脚本中,我需要等待标题上带有字符串的窗口出现,执行一些操作,然后等待它消失,然后执行其他操作。 直到昨天,我才有了这个简单的代码。这样做的问题是,脚本保持运行状态时,无法将磁盘置于省电状态,并且可能会持续多个小时: while :; do until wmctrl -l | grep -q "$string"; do # until sleep 0.5 done : do action 1 while wmctrl -l | grep -q "$string"; do # while sleep 0.5 done : do action 2 done 自从我确定所提到的代码疯狂地唤醒磁盘以来,我浏览了一些命令行工具的文档,并决定xdotool等待窗口出现,并xprop确定窗口何时消失: while :; do # we use `until' because sometimes …
11 bash  shell  python  window 

2
在执行子壳之前先展开它?
我经常使用子外壳运行命令,有时希望在运行某些东西之前先扩展子外壳。 例如,如何在运行之前扩展以下命令行,以便可以编辑子shell的结果? 例如 $ find -name "test.txt" /tmp/test.txt $ mv $(!!) /tmp/new.txt 我希望在运行命令之前看到子外壳已扩展,如下所示: $ mv /tmp/test.txt /tmp/new.txt 有什么办法可以做到这一点?

4
当CPU /内存使用率过高时,Bash脚本会自动终止进程
我创建了一个脚本,该脚本可以在CPU和/或内存使用率达到80%时终止进程。发生这种情况时,它将创建一个被终止进程的列表。我该怎么做才能改善它? while [ 1 ]; do echo echo checking for run-away process ... CPU_USAGE=$(uptime | cut -d"," -f4 | cut -d":" -f2 | cut -d" " -f2 | sed -e "s/\.//g") CPU_USAGE_THRESHOLD=800 PROCESS=$(ps aux r) TOPPROCESS=$(ps -eo pid -eo pcpu -eo command | sort -k 2 -r | grep -v …


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.