我有这个脚本
# 检查丢失+找到的文件夹 函数 chklnf { #DOC echo "chklnf - 列出已安装设备上 lost+found 文件夹中的所有文件" x="失物招领/" 如果 [ "$EUID" != 0 ] ;那么 echo "请输入 sudoers 密码以允许访问 $x 文件夹。" sudo echo “谢谢……” 菲 对于 $(mount | sed -nre 's,^/dev/.+ on ([^ ]+).*$,\1,p') 中的 p 做 如果 [ -d "$p/$x" ] ;那么 回显-n“ --- $ p / $ x ---” sudo ls -l "$p/$x" 菲 完毕 }
我希望在 .bash_profile 末尾运行一次,但是,
每次出现新的 shell 提示时都必须输入密码,这很不方便。
那么,是否可以“去掉”其中的“ls -l”?
或者:
如何检测“sudo 模式”是否已经存在?(参考:脚本中的“$EUID”)
剪切 function-def 后,保存为文件 /home/hannu/bin/checklostfound,并添加最后一行 /etc/sudoers(如下所示)
$ sudo cat /etc/sudoers [sudo] hannu 的密码:**************** # # 必须以 root 身份使用“visudo”命令编辑此文件。 #... {剪切}
# 特殊单脚本 hannu ALL=(root) NOPASSWD: /home/hannu/bin/checklostfound
$ ls -l /home/hannu/bin/checklostfound -rwx------ 1 hannu hannu 526 9 月 24 日 16:30 /home/hannu/bin/checklostfound
$须藤〜/ bin / checklostfound --- //丢失+找到/ --- 共 0 个
$
最后,对 $p 进行调整,/
最后得到:
$ cat /home/hannu/bin/checklostfound /bin/env bash #!/bin/环境 # 检查丢失+找到的文件夹 #DOC echo "chklnf - 列出已安装设备上 lost+found 文件夹中的所有文件" x="失物招领/" 如果 [ "$EUID" != 0 ] ;那么 echo "请输入 sudoers 密码以允许访问 $x 文件夹。" sudo echo “谢谢……” 菲 对于 $(mount | sed -nre 's,^/dev/.+ on ([^ ]+).*$,\1,p') 中的 p 做 九月=“/” 如果 [ “${p: -1}” = “/” ]; 然后 sep=""; fi 如果 [ -d "$p$sep$x" ] ;那么 回显 -n "--- $p$sep$x --- " sudo ls -l "$p$sep$x" 菲 完毕 $ sudo /home/hannu/bin/checklostfound -- /丢失+找到/ --- 共 0 个 --- /media/hannu/Data8/lost+found/ --- 总计 0 $ /home/hannu/bin/checklostfound 请输入 sudoers 密码以允许访问 lost+found/ 文件夹。 [sudo] hannu 的密码: 谢谢... --- /丢失+找到/ --- 总计 0 --- /media/hannu/Data8/lost+found/ --- 总计 0 $
答案1
将您的函数转换为 中的独立脚本/usr/local/bin
。现在您有一个更简单的问题,只需授予对该固定命令的无密码“sudo”访问权限,这可以通过 /etc/sudoers 完成:
hannu ALL=(root) NOPASSWD: /usr/local/bin/checklostfound
如何检测当前用户是否已处于“sudo”模式?(参考:脚本中的“$EUID”)
“sudo 模式”的字面意思是当前用户是不是原来的用户,这意味着 root 现在是“当前用户”。
您的比较语法是错误的 - 周围的空格=
是不是可选的。它必须是:
if [ "$EUID" = 0 ]; then