标签: bash

是否可以在 OS X Mountain Lion 下以不同用户身份运行软件?

我一直在尝试以不同的用户身份运行应用程序。

尝试 1
sudo -u otheruser open /Applications/TextEdit.app启动应用程序,但它使用当前用户,而不是otheruser

尝试2
login usernamesu - otheruser成功登录为otheruser,不同的用户活动监控器弹出,但类似open /Applications/TextEdit.app回报的错误LSOpenURLsWithRole() failed with error -10810 for the file /Applications/TextEdit.app.

尝试 3
sudo su - otheruser -c /Applications/TextEdit.app/Contents/MacOS/TextEdit似乎启动了该应用程序(它出现在由otheruser启动的 Activity Monitor 下)但是当停靠图标无限期地弹跳时会出现此错误:_RegisterApplication(), FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL.

问题
那么……我如何以不同的用户身份运行应用程序?

terminal sudo bash osx-mountain-lion macos

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

使用 iTerm2 和 Mac OSX 10.8.3 打开特定系统的选项卡式 shell

我对 MAC 还是很陌生,我一直在寻找一种编写脚本或使用 GUI 来完成以下操作的方法。

在选项卡式视图中向一组主机打开 Iterm 并通过 ssh 连接到每个主机。

在 gui 我可以做

新窗口 -->> 配置文件 -->> 打开我创建的配置文件

这给了我一个窗口,可以对单个主机执行 ssh 命令。

非常感谢任何帮助或指导。

在发布之前,我已经通读了类似的问题,因为它们似乎都没有解决我的问题。

mac ssh bash iterm2 macos

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

如何避免“grep:参数列表太长”错误?

我正在使用 Mac 10.7.5 和 bash shell。我正在尝试在一组文件中查找字符串的实例,但不断收到此错误

Daves-MacBook-Pro:folder davea$ find . -name "*" | xargs grep 'state-icons'
xargs: grep: Argument list too long
Run Code Online (Sandbox Code Playgroud)

如何运行命令(或类似命令)以避免此错误?

script bash grep xargs

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

删除最后一个字 (Ctrl-W):使 bash shell 表现得像 vim 命令行

在 bash shell 中可用的许多有用的键盘快捷键中,有Ctrl-W删除光标左侧的单词。假设我的命令行如下所示:

cp some-file /foo/bar/baz/copy
Run Code Online (Sandbox Code Playgroud)

现在我希望能够按下Ctrl-W并最终得到以下结果:

cp some-file /foo/bar/baz/
Run Code Online (Sandbox Code Playgroud)

在 Vim 的命令行中,它实际上是这样工作的:只有字母数字字符被视为“单词”,而特殊字符(如/)用作标记新“单词”开始的分隔符。

但不幸的是,它在我迄今为止使用的所有 shell 中都不是这样工作的。只有空格才能分隔“单词”,因此使用上面显示的命令行按下快捷方式会给我:

cp some-file
Run Code Online (Sandbox Code Playgroud)

有没有办法让 Bash 表现得像 Vim?我可以将一些配置放入我的.bashrc?

keyboard-shortcuts bash vim command-line

7
推荐指数
2
解决办法
4032
查看次数

stdbuf 不起作用,而 unbuffer 起作用

我正在尝试将时间戳应用于进程的标准输出。为了应用正确的时间戳,我尝试对过程进行unbuffer 标准输出。这适用于unbuffer但不符合stdbuf我的预期。考虑以下慢速打印脚本“ slowprint ”:

#!/bin/bash

if [ $# -ne 2 ]; then
   echo "usage: ${0%%/*} <file> <delay in microseconds>"
   exit 1
fi

DELAY=$2 perl -pe 'BEGIN{use Time::HiRes qw(usleep)} { usleep($ENV{DELAY}) }' $
Run Code Online (Sandbox Code Playgroud)

现在比较以下应用时间戳的尝试:

stdbuf -oL ./slowprint <(ls) 100000 | 
awk '{ print strftime("%H:%M:%S"), $0; fflush(); }'
Run Code Online (Sandbox Code Playgroud)

对比

unbuffer ./slowprint <(ls) 100000 | 
awk '{ print strftime("%H:%M:%S"), $0; fflush(); }' 
Run Code Online (Sandbox Code Playgroud)

第二个对我有用,而第一个没有,尽管我希望他们做同样的事情。目前unbuffer不合适,因为它在某些情况下会吞下错误代码(我发布了一个关于该行为的单独问题)。

linux bash awk buffer

7
推荐指数
1
解决办法
1862
查看次数

cygwin 的 chmod 工作正常,但不起作用

我的 Cygwin 安装行为异常:chmod不起作用。

[09:45 Administrator@DellIns14 ~] > ls -ls /usr/bin/chmod
64K -rwxr-xr-x 1 Administrator None 38K Feb  6  2012 /usr/bin/chmod

[09:47 Administrator@DellIns14 ~] > rm /tmp/example.sh
rm: remove regular empty file `/tmp/example.sh'? y
[09:48 Administrator@DellIns14 ~] > touch /tmp/example.sh
[09:48 Administrator@DellIns14 ~] > ls -ls /tmp/example.sh
0 -rw-r--r-- 1 Administrator None 0 Jul  8 09:48 /tmp/example.sh
[09:48 Administrator@DellIns14 ~] > chmod -v +x /tmp/example.sh
mode of `/tmp/example.sh' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
[09:48 Administrator@DellIns14 ~] > …
Run Code Online (Sandbox Code Playgroud)

windows-7 cygwin bash permissions chmod

7
推荐指数
2
解决办法
9542
查看次数

Bash:字符串与正则表达式的精确匹配

我必须使用正则表达式对字符串进行精确匹配。我必须意识到这种模式:toCheck 必须以 2 次出现的 $str1 开始,最多出现 1 次 $str2。如果 toCheck 匹配模式,我必须在输出中写入 $toCheck:success,否则 $toCheck:failed。

我写了这个正则表达式:

regex="$1($1)+$2"
Run Code Online (Sandbox Code Playgroud)

使用站点 regexr.com,我插入了例如:

regex="lo(lo)ba"
toCheck="loloba"
Run Code Online (Sandbox Code Playgroud)

这是一个成功。

在 regerx.com 上,这场比赛直到最后一场比赛:

toCheck="lolobaba"
Run Code Online (Sandbox Code Playgroud)

但是,在我的 bash 代码上,它是成功的。

这是完整的代码:

toCheck="lolobaba"
regex="lo(lo)+ba"

if [[ $toCheck =~ $regex ]]; then

    echo "$toCheck:success" > output
else
    echo "$toCheck:failed" > output
fi
Run Code Online (Sandbox Code Playgroud)

所以,问题是:如何在字符串和正则表达式之间进行精确匹配?

linux bash regex

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

获取SSH单行命令显示颜色

我想在 SSH 单行命令上启用彩色文本输出,但我似乎无法让它在 OS X、Ubuntu 14.10 或 OpenSUSE 12.2 上运行。

如果我通过 ssh 进入服务器并ls --color=auto在提示符中键入,它工作得很好,以不同颜色显示目录、符号链接和常规文件,但是,如果我将命令放在同一系统上的 ssh 单行中:ssh user@host "ls --color=auto",输出没有颜色。

打字echo $TERM告诉我xterm-256color是否将它放在单行语句中。

这主要用于远程构建上的颜色编码错误和警告,但最好为所有内容启用它。

有什么建议吗?

linux ssh bash command-line colors

7
推荐指数
1
解决办法
6602
查看次数

`ls` 可以设置为只列出前 X 个文件/目录吗?

我正在尝试创建一个命令,该ls命令在调用该命令时仅显示前 30 个文件。我找到了这个方法...

ls | head -30
Run Code Online (Sandbox Code Playgroud)

...但它最终会在一个长列表中吐出文件,而不是排成一行或按照.bash_profile. 那么,有没有办法简单地限制输出?

linux bash ls macos

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

使用 sed 替换字符串的一部分

我打算替换文件中的某些字符串;所以我正在使用 sed。

我想替换字符串,而 sed 读取字符串并将文本附加到字符串的中间。

例子:

string in myfile : user=blabla
string that I want to obtain: user=bob
Run Code Online (Sandbox Code Playgroud)

所以我以这种方式运行 sed,让它搜索“user=”字符串,并将其替换为“user=bob”

sed -i 's/user=*/user=bob/' myfile
Run Code Online (Sandbox Code Playgroud)

我得到的是

user=bobblabla
Run Code Online (Sandbox Code Playgroud)

基本上 sed 认为我只想替换那部分,而我想用新字符串替换整个字符串。我认为 * 会告诉 sed 考虑之后的任何事情,但它不起作用。

因为我不知道“blabla”是什么,所以我不能把它放在 sed 命令中。我如何告诉 sed 查找以“user=”开头的字符串并将整个字符串替换为新字符串?

bash sed

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