标签: sh

#!/bin/sh 与 #!/bin/bash 的最大可移植性

我通常使用 Ubuntu LTS 服务器,从我理解的符号链接/bin/sh/bin/dash. 许多其他发行版虽然符号链接/bin/sh/bin/bash.

#!/bin/sh由此我了解到,如果脚本在顶部使用,它可能不会在所有服务器上以相同的方式运行?

当您希望在服务器之间最大程度地可移植这些脚本时,是否有建议将哪个 shell 用于脚本?

linux shell bash sh

37
推荐指数
2
解决办法
6004
查看次数

无法在 amazon ec2 (Amazon Linux) 中输入小写的 e

在我的新 ec2 版本上运行几天后,发生了以下情况:

  1. 我登录 SSH,一切正常,我开始编码
  2. 我第二天回来,登录SSH
  3. 我不能再输入小写字母e了——输入时出现错误提示
  4. 我尝试从另一台计算机 ssh,同样的问题
  5. 我重启服务器,同样的问题
  6. 我打开nanovie工作正常,只是没有在bashsh
  7. 我终止了服务器,创建了一个新的,从头开始安装,几天后它又发生了

这令人费解!我什至可以从哪里开始进行故障排除?

我的本地机器设置:

  • 视窗 XP 或 7
  • 腻子(最新)或 cygwin/openssh

EC2 设置

stty -awhile I can't type an 的输出e

sh-4.1$ stty -a
speed 38400 baud; rows 30; columns 95; line = 0;
intr = ^C; …
Run Code Online (Sandbox Code Playgroud)

ssh bash amazon-ec2 sh

16
推荐指数
1
解决办法
889
查看次数

如何更改 FreeBSD 中的默认 shell?

FreeBSD 中的默认 shell 是sh,我真的无法忍受:自动完成非常有限,rehash 命令会杀死我。感觉自己是个单臂单腿的人……

如何将 shell 全局更改为zshor bash- 对于 root 以及所有当前和未来用户?

freebsd shell bash zsh sh

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

来自本地机器的shell脚本在远程机器上执行命令,然后在本地机器上继续

问题是:我想从远程机器复制文件。

我正在寻找一种方法来编写一个 shell 脚本,该脚本将连接到远程机器,获取存储文件的位置,一旦我获得了与远程服务器断开连接的位置,并从本地机器中使用 scp 获得的位置到复制文件。

具体来说,我想知道如何通过脚本连接到远程机器,在该机器上执行任务。断开连接,并在本地继续执行。

ssh sh

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

FreeBSD 8.2,删除了/bin/sh,无法启动

我在我的一台服务器上做了一个非常糟糕的决定。

我删除了/bin/sh。我重新启动了服务器,但服务器无法运行,因为它需要/bin/sh启动 rc 脚本。我也无法访问单用户模式,因为需要 sh。

有没有什么简单的方法可以重新安装bourn shell?

我尝试从 live cd 复制 sh,但在 ld-elf.so.1 库上失败了。所以我将它从 livecd 复制到 /libexec 到我的 / 分区。然后它需要 libedit.so 库,我将它复制到 /libexec 但这次它不起作用。

我尝试了一个符号链接,/usr/local/bin/bash但仍然出现“找不到 sh”类型错误。我假设这是因为/usr尚未安装,因为它是从 rc 脚本完成的。

任何帮助是极大的赞赏。

freebsd sh

8
推荐指数
3
解决办法
1259
查看次数

无头运行 firefox 时,如何在 Xvfb 中启用 XRandR 或在 Firefox 中禁用它?

我正在尝试无头启动 Firefox。以下是启动它的 shell 脚本的开头:

#!/bin/sh
Xvfb :99 >/dev/null 2>&1 &
XVFB=$!
sleep 3
firefox --display=:99 >/dev/null 2>&1 &
FIREFOX=$!
Run Code Online (Sandbox Code Playgroud)

运行此脚本时,出现以下错误:

Xlib:  extension "RANDR" missing on display ":99".
Run Code Online (Sandbox Code Playgroud)

我曾尝试使用以下命令启动 Xvfb,但它并不能防止出现错误:

Xvfb -extension RANDR :99 >/dev/null 2>&1 &
Run Code Online (Sandbox Code Playgroud)

Xvfb +extension RANDR :99 >/dev/null 2>&1 &
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法在 Xvfb 中启用 XRandR,以便 Firefox 能够看到扩展?

或者,有没有办法在 Firefox 中禁用 XRandR?

xorg firefox sh xvfb

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

如何在不使用 -f 的情况下让 ssh 在后台运行?

我正在尝试创建一个 ssh 隧道,将其分离到后台进程中,然后编写一个 pid 文件,稍后我可以用它来杀死它。我可以用 运行 ssh -f,但是我没有处理它的 PID。

但是,当我尝试通过 nohup 或 setid 运行下面的脚本时,控制权永远不会返回到我尝试守护脚本的 shell。

#!/bin/sh                                                 

while getopts ":v" flag; do
    case $flag in
        v|verbose) verbose=1;;
        :) echo "option -$lastflag requires an argument"; exit 1;;
    esac 
    lastflag="$flag"
    shift $((OPTIND - 1)); OPTIND=1
done

ssh  -p '2222'  -nNL '5984:localhost:5984' 'blah@foo.com' &
pid=$!
sleep 2;
ps -p $pid >/dev/null 2>&1 || exit 1
echo $pid > "var/couchdb-tunnel.pid"
wait
Run Code Online (Sandbox Code Playgroud)

调用:

nohup script.sh
setsid script.sh
Run Code Online (Sandbox Code Playgroud)

我如何说服 ssh(我假设)放弃终端?有没有其他方法可以实现我想要的?

unix ssh sh

5
推荐指数
1
解决办法
4340
查看次数

SH 条件重定向

我希望能够/dev/null根据命令行开关将脚本的某些输出重定向到。我不知道我该怎么做。

以一种愚蠢的方式,它会是这样的(以一种过于简化的方式):

#!/bin/sh

REDIRECT=

if [ $# -ge 1 -a "$1" = "--verbose" ]; then
    echo    "Verbose mode."
    REDIRECT='1>&2 > /dev/null'
fi

echo "Things I want to see regardless of my verbose switch."

#... Other things...

# This command and others along the script should only be seen if I am in verbose mode.
ls -l $REDIRECT
Run Code Online (Sandbox Code Playgroud)

请问有什么线索吗?

谢谢人们。

bash redirection sh

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

Linux shell 脚本“没有那个文件或目录”

我创建了一个 shell 脚本来完成 3 个简单的任务(压缩一个目录,重命名最终文件并删除源目录)。脚本源码如下:

#!/bin/bash
if [[ $2 == *"/data/"* ]]
then
    src= $2"/*";
    dest= $1".zip";

    # Just for test
    echo $src;

    # Commented for now
    #zip -r -j $dest $src
    #mv $dest $1
    #rm -rf $2
else
    echo "Invalid arguments";
fi
Run Code Online (Sandbox Code Playgroud)

当我使用这些参数运行上面的脚本时,出现错误:

./scriptzip.sh /data/file-new /data/file-old

./scriptzip.sh: line 4: /data/file-old/*: No such file or directory
./scriptzip.sh: line 5: /data/file-new.zip: No such file or directory
Run Code Online (Sandbox Code Playgroud)

如何防止外壳程序测试“类似目录”字符串的变量?有什么办法可以跳过吗?

linux bash sh

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

从 cron 执行 sh 脚本

我有一个 test.sh 脚本

#!/bin/sh
php /home/v/file.php
sh /root/x/some.sh
Run Code Online (Sandbox Code Playgroud)

当我从命令行以 root 身份执行文件时,它可以工作。

sh /home/v/test.sh 
Run Code Online (Sandbox Code Playgroud)

当我将它设置为 crontab -e(是根 cron)时,它不起作用

 * * * * * sh /home/v/test.sh
Run Code Online (Sandbox Code Playgroud)

我做错了什么?谢谢

debian shell cron sh

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

如何在不创建文件的情况下执行 shell 脚本

如何在不创建文件的情况下执行 shell 脚本?例如,假设我有以下脚本 ( testscript):

#!/bin/bash
function run_free() {
   free -m
}

run_free
Run Code Online (Sandbox Code Playgroud)

然后我当然可以执行此操作: sh testscript

不过,我想避免创建文件。我试过:

sh echo '#!/bin/bash function run_free() { free -m } run_free'

哪个不起作用。有任何想法吗?

shell bash sh shell-scripting

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

如何删除^m符号

我需要在 Debian 64 位下编译 Qt。我下载了源代码,但在行尾的每个文件中到处都有 ^M 符号,bash 不运行配置脚本。如何从qt源中的所有文件中删除它?谢谢。

debian bash sh

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

启动 .sh 脚本后出现“必须连接到终端”

我有一个可以运行文件的简短 bash 脚本。当我尝试通过“x.sh start”启动它时,会出现“必须连接到终端”的警告。如何开始?我尝试了一些 chmods 配置。这个脚本在 /usr/local/bin 我现在在 root 上,在我的 Debian 7 vps 上。

  #!/bin/bash

server_start() {
screen /usr/share/s/x.sh &
}

server_stop() {
killall x.sh
killall xx
}

server_restart() {
server_stop
sleep 1
server_start
}
case "$1" in
'start')
server_start

;;
'stop')
server_stop
;;
'restart')
server_restart
;;
*)
echo "usage $0 start|stop|restart"
esac
Run Code Online (Sandbox Code Playgroud)

debian sh

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

标签 统计

sh ×13

bash ×7

shell ×4

debian ×3

ssh ×3

freebsd ×2

linux ×2

amazon-ec2 ×1

cron ×1

firefox ×1

redirection ×1

shell-scripting ×1

unix ×1

xorg ×1

xvfb ×1

zsh ×1