我一直在尝试以不同的用户身份运行应用程序。
尝试 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.
问题
那么……我如何以不同的用户身份运行应用程序?
我正在尝试将时间戳应用于进程的标准输出。为了应用正确的时间戳,我尝试对过程进行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=”开头的字符串并将整个字符串替换为新字符串?
我有一个与此类似但不同的问题:如果可能,我希望 bash在自动完成中使用glob 扩展。例如,我想
$ ls *2.<TAB>
Run Code Online (Sandbox Code Playgroud)
给我:
$ ls mydoc2.
mydoc2.pdf mydoc2.tex mydoc2.txt
Run Code Online (Sandbox Code Playgroud)
我经常遇到这种情况。在上面的例子中,我使用了短前缀“mydoc”,但实际的前缀通常很长。这可能吗?
我知道*2.*会扩展为C-x*,但这是一个不同的函数,在这种情况下不适合(因为我只需要从与 glob 匹配的文件列表中选择一个文件)。
rsync是一个登录到其他机器的非交互式程序。它不需要用于交互式 shell 会话的 init 文件,并且绝对需要用于登录 shell 的 init 文件。或者我会这么认为。
然而.bashrc被阅读.profile却没有(除非我让.bashrc自己阅读.profile)。为什么?
我有一堆文件,其中有很多行配置如下:
what,r-crq,What,What,VAC5700-035080,What
i,pns11,I,I,VAC5700-035090,I
do,vdd,did,did,VAC5700-035100,did
Run Code Online (Sandbox Code Playgroud)
我想进行搜索和替换以结束此操作,然后存储并重新插入 4 个数字VAC并删除数字的尾随部分VAC:
what,r-crq,What,What,VAC5700,What
i,pns11,I,I,VAC5700,I
do,vdd,did,did,VAC5700,did
Run Code Online (Sandbox Code Playgroud)
有没有办法一次对所有文件执行此操作(VAC数量会有所不同,因此需要将其存储为变量),最好是在 Bash shell 中?
我假设我也可以使用正则表达式在“Notepad++”中执行此操作,但我认为 shell 脚本会更可取,因为我可以将所有文件作为批处理执行。