命令不会在脚本中运行
Command wont run in script
我正在尝试在 shell 脚本中运行命令,但它不起作用。
在 shell 中的脚本之外,我可以在所需的主机上运行以下命令。该文件是用正确的信息创建的。
sudo cat /etc/shadow | cut -d: -f1,8 | sed /:$/d > /tmp/expirelist.txt
当命令在我的脚本中运行时,我首先 ssh 结束然后运行命令,但出现以下错误。
[batch@testserver01 bin]$ checkP.sh
Testserver02
/usr/local/bin/checkP.sh: line 7: /tmp/expirelist.txt: Permission denied
这是脚本的一部分。我试过使用 ssh -o
#!/bin/bash
for SERVER in `cat /admin/lists/testlist`
do
echo $SERVER
ssh $SERVER sudo cat /etc/shadow | cut -d: -f1,8 | sed /:$/d > /tmp/expirelist.txt
...
导致权限被拒绝错误的原因是什么?
我不确定这一点,但您可能 运行 遇到脚本中包含 'sudo' 的问题。您可以尝试从脚本中删除 'sudo',然后像这样删除 运行:
$ sudo checkP.sh
不要使用硬编码的临时文件名——当你这样做时,这意味着如果一个用户(比如你的开发帐户)已经 运行 这个脚本并留下了一个名为 /tmp/expirelist.txt
的文件, 没有其他用户可以 运行 相同的脚本。
tempfile=$(mktemp -t expirelist.XXXXXX)
ssh "$SERVER" sudo cat /etc/shadow | cut -d: -f1,8 | sed /:$/d >"$tempfile"
通过使用 mktemp
,您保证运行每次调用都将使用一个新的、不同的、以前不存在的临时文件,以防止任何冲突的可能性。
顺便说一句——如果您希望在远程系统而不是本地系统上创建文件,您需要这样做:
ssh "$SERVER" <<'EOF'
tempfile=$(mktemp -t expirelist.XXXXXX)
sudo cat /etc/shadow | cut -d: -f1,8 | sed /:$/d >"$tempfile"
EOF
我正在尝试在 shell 脚本中运行命令,但它不起作用。
在 shell 中的脚本之外,我可以在所需的主机上运行以下命令。该文件是用正确的信息创建的。
sudo cat /etc/shadow | cut -d: -f1,8 | sed /:$/d > /tmp/expirelist.txt
当命令在我的脚本中运行时,我首先 ssh 结束然后运行命令,但出现以下错误。
[batch@testserver01 bin]$ checkP.sh
Testserver02
/usr/local/bin/checkP.sh: line 7: /tmp/expirelist.txt: Permission denied
这是脚本的一部分。我试过使用 ssh -o
#!/bin/bash
for SERVER in `cat /admin/lists/testlist`
do
echo $SERVER
ssh $SERVER sudo cat /etc/shadow | cut -d: -f1,8 | sed /:$/d > /tmp/expirelist.txt
...
导致权限被拒绝错误的原因是什么?
我不确定这一点,但您可能 运行 遇到脚本中包含 'sudo' 的问题。您可以尝试从脚本中删除 'sudo',然后像这样删除 运行:
$ sudo checkP.sh
不要使用硬编码的临时文件名——当你这样做时,这意味着如果一个用户(比如你的开发帐户)已经 运行 这个脚本并留下了一个名为 /tmp/expirelist.txt
的文件, 没有其他用户可以 运行 相同的脚本。
tempfile=$(mktemp -t expirelist.XXXXXX)
ssh "$SERVER" sudo cat /etc/shadow | cut -d: -f1,8 | sed /:$/d >"$tempfile"
通过使用 mktemp
,您保证运行每次调用都将使用一个新的、不同的、以前不存在的临时文件,以防止任何冲突的可能性。
顺便说一句——如果您希望在远程系统而不是本地系统上创建文件,您需要这样做:
ssh "$SERVER" <<'EOF'
tempfile=$(mktemp -t expirelist.XXXXXX)
sudo cat /etc/shadow | cut -d: -f1,8 | sed /:$/d >"$tempfile"
EOF