伙计们,我遇到了bash脚本的问题,该脚本以不同的用户身份运行特定命令。
背景:运行在 Linux 机器(CentOS)上,脚本很简单,就是启动hudson-ci应用程序。
declare -r HOME=/home/hudson
declare -r RUNAS=hudson
declare -r HOME=/home/hudson
declare -r LOG=hudson.log
declare -r PID=hudson.pid
declare -r BINARY=hudson.war
su - ${RUNAS} -c "nohup java -jar ${HOME}/${BINARY} >> ${HOME}/${LOG} 2>&1; echo $! > ${HOME}/${PID}" &
Run Code Online (Sandbox Code Playgroud)
这是脚本的删节版本,运行时,脚本退出时显示“standard in must be a tty”。关于我可能做错了什么的任何想法?我已经尝试过Google 博士,但到目前为止所有的建议都没有帮助。
其他参考: Mandriva Linux 'su' 错误
在 Mac OS X 中,从 shell 脚本应用程序的角度来看,如何获取它的包目录路径以在 shell 脚本中使用?使用 env 命令时,它返回应用程序的执行路径是 /,并且没有环境变量帮助。我这样做是因为我想访问捆绑包的一些资源,并且因为应用程序并不总是安装在 /Applications 中。
谢谢!
有没有办法让 GNU Screen 在它被附加时检测它并在它被附加时执行我拥有的 shell 脚本?这样做的原因是我想保持 X11 转发的显示变量正确,但我需要检测屏幕何时重新连接到另一台计算机以触发我的脚本。
谢谢。
如何将包含大量十六进制数字的文件转换为十进制?
示例:文件 1
0x59999
0x5acdc
0xffeff
Run Code Online (Sandbox Code Playgroud)
我想开始
$ cat file1 | util | cat >file2
Run Code Online (Sandbox Code Playgroud)
并使用以下内容获取 file2:
1021489
1249230
3458080
Run Code Online (Sandbox Code Playgroud)
(示例输出中的数字是随机的,因为我无法将这么长的十六进制数字转换为十进制)
更新:我使用以下 Perl 命令解决了这个问题:
perl -pe '$_=hex;$_.="\n"'
Run Code Online (Sandbox Code Playgroud)
有更好的解决方案吗?真正的任务是需要能够对十六进制数字进行排序。
我正在尝试sync.sh为我们的网站创建一个与我们不太理想的版本控制相协调的脚本。此脚本会将数据库的实时副本迁移到我们的开发环境和其他一些东西。我在 mysql 迁移部分遇到了问题。
该脚本在开发机器上运行。 remote是现场主持人。
# --------------
# database
# ssh tunnel
ssh -L 3307:remote:3306 user@remote
# mysql dump
mysqldump -u someuser -h remote -P 3307 -p"p4ssw0rd" db > localfile.sql
# somehow close ssh tunnel ???
# populate local db with sql dump file
mysql -ulocal db < localfile.sql
# -----------------
# other sync stuff
# ...
Run Code Online (Sandbox Code Playgroud)
当我只运行脚本的 mysql 部分时,我得到了这个输出:
Pseudo-terminal will not be allocated because stdin is not a terminal.
Enter password:
Run Code Online (Sandbox Code Playgroud)
我们已经设置了 ssh 密钥,我可以正确地 ssh …
我有一行由逗号分隔的 3 个长数字。我想要做的是删除中间的数字,只留下用逗号分隔的第一个数字和最后一个数字。
目前:
123456789123,723456789123456,834567885544334
123456789125,723456789123457,834567885544333
123456789126,723456789123458,834567885544337
Run Code Online (Sandbox Code Playgroud)
想要的结果:
123456789123,834567885544334
123456789125,834567885544333
123456789126,834567885544337
Run Code Online (Sandbox Code Playgroud)
我尝试这样做,但它不适用于这些正则表达式:
%[0-9]+,[0-9]+,[0-9]+^1,^2哪个正则表达式实际上是我想要实现的?
注意 - 我目前正在使用在 Windows 7 上运行的名为 Ultraedit 的应用程序,如果您推荐一个更好的 Windows 文本编辑应用程序可以解决我的问题,请告诉我。
我需要在带有 GNOME 的 Red Hat Linux 5 虚拟机上运行一些基本命令来启动几个服务器。
例子
cd /home/user/scripts
sh runTHISthing.sh pub
cd /home/user/logs
tailf pub.log
Run Code Online (Sandbox Code Playgroud)
不是疯狂的代码量,但有时我每天重启 VM 好几次。在 Windows 中,我可能只是创建一个批处理文件并将其放在我的桌面上。然后只需双击即可。
无论如何在Linux中做同样的事情吗?我试图创建一个启动器,它只在终端中运行 emtpy 文件而没有结果。
如何在目录甚至子目录中查找所有零字节文件?
我这样做了:
#!/bin/bash
lns=`vdir -R *.* $dir| awk '{print $8"\t"$5}'`
temp=""
for file in $lns ; do
if test $file = "0" ;then
printf $temp"\t"$file"\n"
fi
temp=$file
done
Run Code Online (Sandbox Code Playgroud)
...但我只有该目录中的文件,而不是所有文件,如果任何文件名有空格,我只会得到第一个单词后跟一个制表符。
谁能帮我?
我想写一个shell script或alias查找目录中不同类型文件的数量。例如,脚本的示例输出应该是:
*.h 20
*.c 40
*.cpp 10
Makefile 3
Run Code Online (Sandbox Code Playgroud) shell-script ×10
linux ×5
bash ×4
command-line ×2
macos ×2
shell ×2
windows ×2
batch-file ×1
bundle ×1
gnu-screen ×1
mysql ×1
path ×1
perl ×1
regex ×1
rvm ×1
ssh ×1
ssh-tunnel ×1
ultraedit ×1
windows-7 ×1