标签: bash

Linux bash shell 用键盘复制前几行(不是历史)

是否可以使用键盘在终端窗口中选择一些不在当前编辑行中的文本?(例如,为了复制先前命令输出的一部分)。

linux bash

11
推荐指数
1
解决办法
5339
查看次数

`sh` 命令的目的是什么?

sh命令在交互使用和在 bash 脚本内部使用时的目的是什么?

除了 hash bang 行(第一行)之外,应该在 bash 系统上sh替换为bash

例子:

#!/bin/bash
sh -c "command"
Run Code Online (Sandbox Code Playgroud)

bash

11
推荐指数
2
解决办法
3万
查看次数

符号链接到当前文件夹作为绝对路径而不输入整个路径

符号链接是保存相对路径的快捷方式:

~/foo? ln -s . ~/bar/foo
~/foo? ls -l ~/bar
total 8
lrwxr-xr-x    1 me  me     1B 15 May 14:38 foo -> .
Run Code Online (Sandbox Code Playgroud)

该文件~/bar/foobar当前目录的符号链接,即它本身

如果我想在另一个目录中创建一个符号链接到我当时所在的目录怎么办?所以在上面的例子中,我在~/foo,我想创建~/bar/foo一个符号链接到~/foo. 当然,我当前的目录可能比 5 个字符长很多,而且可能不太容易输入。

bash symbolic-link ln

11
推荐指数
1
解决办法
1万
查看次数

如何获取脚本生成的所有子进程的列表

语境:

用户向我提供他们的自定义脚本来运行。这些脚本可以是任何类型的脚本,例如启动多个 GUI 程序、后端服务的脚本。我无法控制脚本的编写方式。这些脚本可以是阻塞类型,即执行等待直到所有子进程(顺序运行的程序)退出

#exaple of blocking script
echo "START"
first_program 
second_program 
echo "DONE"
Run Code Online (Sandbox Code Playgroud)

或非阻塞类型,即在后台分叉子进程并退出类似的类型

#example of non-blocking script
echo "START"
first_program &
second_program &
echo "DONE"
Run Code Online (Sandbox Code Playgroud)

我想要达到什么目标?

用户提供的脚本可以是上述两种类型中的任何一种,也可以是两者的混合。我的工作是运行脚本并等待它启动的所有进程退出,然后关闭节点。如果它是阻塞类型,情况很简单,即获取脚本执行进程的 PID 并等待 ps -ef|grep -ef PID 没有更多条目。非阻塞脚本给我带来了麻烦

有没有办法获得通过执行脚本产生的所有子进程的 PID 列表?任何指针或提示将不胜感激

unix bash shell process bash-scripting

11
推荐指数
2
解决办法
2万
查看次数

无法在 tmux 中启动应用程序

当我尝试从 tmux 启动 Sublime Text 或 SourceTree 时出现此错误:

$ subl
Unable to launch Sublime Text 2

$ stree
Unable to open SourceTree
Run Code Online (Sandbox Code Playgroud)

似乎我也无法打开 os x 应用程序:

$ open MPlayerX.app
LSOpenURLsWithRole() failed with error -10810 for the file /Applications/MPlayerX.app.
Run Code Online (Sandbox Code Playgroud)

我正在使用 Yosemite OS X 10.10 (14A388a)、带有 zsh、tmux 1.0a 的 iTerm 2。使用 bash 有同样的问题。知道发生了什么吗?

terminal bash tmux osx-yosemite macos

11
推荐指数
2
解决办法
4693
查看次数

在 bash 中输入的长命令覆盖同一行

由于每当我输入长命令时我们将 Bash 更新到 4.3.27,如果它到达终端窗口的末尾,而不是在新行中继续,它会在开头使用“>”覆盖同一行以标记行被换行(我可以在行上前后移动。我的意思是,它不只是覆盖当前行)

就像是:

假设我的终端有 30 个字符的宽度

更新前 user@HOSTNAME ~$ echo "hello w orld!"

更新后 <ME ~$ echo "hello world!"

自 bash 更新以来,我的环境没有任何变化。$BASHOPTS显示与之前相同的值,除了“complete_fullquote”

如何恢复“多行行为”?

问候

linux terminal bash shell command-line

11
推荐指数
2
解决办法
8800
查看次数

Linux 上的 shell 函数存储在哪里?

起初,我正在寻找which在给它某些程序作为参数后不输出任何内容的原因,例如cd.

从我在这里发现的情况来看,原因可能是cd我的机器上有一个函数,通过运行type cd.

TLDR:但是由于which可以通过$PATH变量定位的普通程序放置在这些$PATH文件夹之一中,函数或脚本cd存储在哪里?

user@linuxmchine:~$ type cd
cd is a function
cd () 
{ 
    __zsh_like_cd cd "$@"
}
Run Code Online (Sandbox Code Playgroud)

linux bash shell-script

11
推荐指数
3
解决办法
9956
查看次数

当 curl 获得非 200 HTTP 状态时退出 bash 脚本

我有一个 bash 脚本设置来执行一些 curl 请求

for currency in EUR INR JPY
do
  curl -i --data '{"currency": "'$currency'"}' -H "Accept: application/json" -H "Content-Type: application/json" http://0.0.0.0:8080/price && echo
done
Run Code Online (Sandbox Code Playgroud)

如果其中一个 curl 响应以 http 状态 != 200 返回,有没有办法让脚本退出?

我还想保留标准的 curl 输出,例如我不想要一个只打印 http 状态代码的解决方案。

干杯

script bash shell shell-script curl

11
推荐指数
1
解决办法
8486
查看次数

在 boot2docker for Windows 中从主机挂载目录

我正在运行 docker 1.6 并boot2docker在 Windows 8.1 机器上运行。当我使用 Boot2Docker Start 快捷方式时,它会将我带到一个 cygwin bash 提示符,我可以在其中本地运行 docker 命令。

我在从我的用户文件夹安装目录时遇到问题。我试过了:

$ docker run -d --name abe -v $APPDATA/Bitcoin:/datadir poliver/bitcoin-abe
Run Code Online (Sandbox Code Playgroud)

我收到错误:

invalid value "C:\\Users\\someone\\AppData\\Roaming/Bitcoin:/datadir"
for flag -v: \Users\someone\AppData\Roaming/Bitcoin:/datadir 
is not an absolute path 
See 'c:\Program Files\Boot2DockeForWindows\docker.exe run --help'.
Run Code Online (Sandbox Code Playgroud)

当我这样称呼它时,我得到了相同的结果:

$ docker run -d --name abe -v "$APPDATA/Bitcoin":/datadir poliver/bitcoin-abe
$ docker run -d --name abe -v "/c/users/someone/AppData/Roaming/Bitcoin":/datadir poliver/bitcoin-abe
$ docker run -d --name abe -v ~/AppData/Roaming/Bitcoin:/datadir poliver/bitcoin-abe
Run Code Online (Sandbox Code Playgroud)

我也试过:

$ docker run -d --name abe …
Run Code Online (Sandbox Code Playgroud)

windows cygwin bash windows-8.1 docker

11
推荐指数
2
解决办法
9975
查看次数

如何让`make`识别别名命令

我正在安装MOOG,当make -f Makefile.maclap我收到错误时:

$ make -f Makefile.maclap
g77 -w   -c -o Abfind.o Abfind.f
make: g77: No such file or directory
make: *** [Abfind.o] Error 1
Run Code Online (Sandbox Code Playgroud)

经过网上研究,我认为,由于我有 gcc-5,因此我的计算机上不存在命令 g77。

因此,我根据堆栈交换问题alias g77=/usr/local/bin/gfortran-5尝试使用 gfortran 编译 fortran 代码。

现在,当我g77看到gfortran-5: fatal error: no input files compilation terminated,表明它g77正在作为编译的工作。

但是当我make -f Makefile.maclap仍然收到错误时:

$ make -f Makefile.maclap
g77 -w   -c -o Abfind.o Abfind.f
make: g77: No such file or directory
make: *** [Abfind.o] Error …
Run Code Online (Sandbox Code Playgroud)

bash command-line compile make

11
推荐指数
2
解决办法
1万
查看次数