我一直在尝试以不同的用户身份运行应用程序。
尝试 1
sudo -u otheruser open /Applications/TextEdit.app启动应用程序,但它使用当前用户,而不是otheruser。
尝试2
login username并su - 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.
问题
那么……我如何以不同的用户身份运行应用程序?
我对 MAC 还是很陌生,我一直在寻找一种编写脚本或使用 GUI 来完成以下操作的方法。
在选项卡式视图中向一组主机打开 Iterm 并通过 ssh 连接到每个主机。
在 gui 我可以做
新窗口 -->> 配置文件 -->> 打开我创建的配置文件
这给了我一个窗口,可以对单个主机执行 ssh 命令。
非常感谢任何帮助或指导。
在发布之前,我已经通读了类似的问题,因为它们似乎都没有解决我的问题。
我正在使用 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)
如何运行命令(或类似命令)以避免此错误?
在 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?
我正在尝试将时间戳应用于进程的标准输出。为了应用正确的时间戳,我尝试对过程进行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不合适,因为它在某些情况下会吞下错误代码(我发布了一个关于该行为的单独问题)。
我的 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) 我必须使用正则表达式对字符串进行精确匹配。我必须意识到这种模式: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)
所以,问题是:如何在字符串和正则表达式之间进行精确匹配?
我想在 SSH 单行命令上启用彩色文本输出,但我似乎无法让它在 OS X、Ubuntu 14.10 或 OpenSUSE 12.2 上运行。
如果我通过 ssh 进入服务器并ls --color=auto在提示符中键入,它工作得很好,以不同颜色显示目录、符号链接和常规文件,但是,如果我将命令放在同一系统上的 ssh 单行中:ssh user@host "ls --color=auto",输出没有颜色。
打字echo $TERM告诉我xterm-256color是否将它放在单行语句中。
这主要用于远程构建上的颜色编码错误和警告,但最好为所有内容启用它。
有什么建议吗?
我正在尝试创建一个命令,该ls命令在调用该命令时仅显示前 30 个文件。我找到了这个方法...
ls | head -30
Run Code Online (Sandbox Code Playgroud)
...但它最终会在一个长列表中吐出文件,而不是排成一行或按照.bash_profile. 那么,有没有办法简单地限制输出?
我打算替换文件中的某些字符串;所以我正在使用 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=”开头的字符串并将整个字符串替换为新字符串?