标签: shell-script

Bash & 'su' 脚本给出错误“标准输入必须是 tty”

伙计们,我遇到了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' 错误

linux bash shell shell-script

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

Shell 脚本 Mac OS X App:获取其路径

在 Mac OS X 中,从 shell 脚本应用程序的角度来看,如何获取它的包目录路径以在 shell 脚本中使用?使用 env 命令时,它返回应用程序的执行路径是 /,并且没有环境变量帮助。我这样做是因为我想访问捆绑包的一些资源,并且因为应用程序并不总是安装在 /Applications 中。

谢谢!

path shell-script bundle macos

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

Gnu 屏幕:在附加时执行命令

有没有办法让 GNU Screen 在它被附加时检测它并在它被附加时执行我拥有的 shell 脚本?这样做的原因是我想保持 X11 转发的显示变量正确,但我需要检测屏幕何时重新连接到另一台计算机以触发我的脚本。

谢谢。

shell-script gnu-screen

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

Linux shell utils:将十六进制列表转换为十进制列表

如何将包含大量十六进制数字的文件转换为十进制?

示例:文件 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)

有更好的解决方案吗?真正的任务是需要能够对十六进制数字进行排序。

linux bash shell-script

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

在 Snow Leopard 上输入/cd-ing 目录时,如何自动运行 shell 命令/脚本?

如果答案很明显,我很抱歉,但我还没有找到答案(可能是因为我搜索的术语不正确)。

我在运行 Snow Leopard 的 Mac 上,我想知道当我输入/cd 到该目录时是否可以自动运行 shell 命令(或脚本)。

一个更好地说明我的问题的例子:我使用RVM来管理 Ruby 的版本。它对它的项目.rvmrc文件采用了类似的策略。这些文件在输入它们所在的目录时运行,以便为该特定项目使用正确版本的 Ruby。

我想做类似的事情,以便在输入包含目录的文件时显示 todo.txt 文件的内容。

command-line shell-script rvm macos

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

如何使用 SSH 隧道编写数据库迁移脚本?

我正在尝试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 …

ssh bash mysql shell-script ssh-tunnel

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

寻找一个正则表达式来处理逗号分隔值列表

我有一行由逗号分隔的 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 文本编辑应用程序可以解决我的问题,请告诉我。

windows windows-7 regex shell-script ultraedit

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

Linux 中的批处理文件等效项

我需要在带有 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 文件而没有结果。

windows linux command-line shell-script batch-file

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

如何在目录中查找所有零字节文件

如何在目录甚至子目录中查找所有零字节文件?

我这样做了:

#!/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)

...但我只有该目录中的文件,而不是所有文件,如果任何文件名有空格,我只会得到第一个单词后跟一个制表符。

谁能帮我?

linux shell-script

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

用于查找目录中所有类型文件及其计数的 Shell 脚本

我想写一个shell scriptalias查找目录中不同类型文件的数量。例如,脚本的示例输出应该是:

*.h      20
*.c      40
*.cpp    10
Makefile 3
Run Code Online (Sandbox Code Playgroud)

linux bash shell perl shell-script

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