我认为这很简单 - 但事实证明它比我预期的要复杂。
我想遍历目录中特定类型的所有文件,所以我这样写:
#!/bin/bash
for fname in *.zip ; do
echo current file is ${fname}
done
Run Code Online (Sandbox Code Playgroud)
只要目录中至少有一个匹配的文件,这就会起作用。但是,如果没有匹配的文件,我会得到:
current file is *.zip
Run Code Online (Sandbox Code Playgroud)
然后我尝试:
#!/bin/bash
FILES=`ls *.zip`
for fname in "${FILES}" ; do
echo current file is ${fname}
done
Run Code Online (Sandbox Code Playgroud)
当没有文件时循环体不执行,我从 ls 收到错误:
ls: *.zip: No such file or directory
Run Code Online (Sandbox Code Playgroud)
如何编写一个干净地处理没有匹配文件的循环?
查看我的 Linux 机器上 VFS 缓存的行为,我可以看到,即使在有效空闲时(crond 和大多数其他守护程序停止,接口关闭),可用内存量也会逐渐增加,这意味着项目正在从缓存中逐出。
我做了很多谷歌搜索,但找不到任何关于如何控制的参考(除非它是 vm_swappiness 的副作用)。任何人都可以让我走上正确的道路来理解为什么在不需要新内存分配的情况下会从缓存中逐出项目?
我目前在我的家用 PC 上安装了 Fedora 9(是的,我知道它很旧 - 但是我每 6 个月才重新启动一次 - 没关系升级!)。我唯一的烦恼是我拥有的键盘与我每天在工作中使用的键盘有很大不同的感觉/lyaout。为了让生活更简单一些,我尝试启用音频反馈。我首先尝试了 KDE (4.2) 系统设置中的设置 - 无济于事。我也试过 'xset c 100' 但仍然没有。ALSA 接口似乎可以从 mplayer、xine、amarok .... 产生音频输出,并且 kmixer 按预期工作。
查看 Xorg 手册页,这里没有明显跳出的内容。有任何想法吗?
我刚刚在我的 Mint 桌面上安装了 Enlightenment,我很喜欢它。但是当我从 Firefox 下载一些东西,然后点击“打开包含文件夹”(在 Firefox 下载菜单中)时,整个屏幕变得无响应,直到我切换到文本控制台并杀死 Firefox。
在默认桌面 (Mate) 中,此操作会打开 Caja 文件管理器。我可以在启蒙下启动和运行 Caja。理想情况下,我想使用本机 Enlightenment 文件管理器,但会对任何不会冻结我的屏幕的可行解决方案感到满意。
我相信该操作是由桌面 mimetype 设置映射的 - 但我找不到任何方法在 Enlightenment 中对其进行编辑。
我试图让现有的应用程序在 SELinux 下运行,这会造成无尽的痛苦。如果我知道各个组件在什么上下文中运行,那么问题会有所缓解 - 用户有上下文,文件有上下文,但似乎进程也可以有一个与用户和文件仅松散相关的上下文(通过任意集合)政策中的规则)。
如果我知道进程在什么上下文中执行,那么理解这个沼泽就会变得很容易 - 是否有命令将其作为标准安装的一部分提供?
我可以在 的输出中查找当前进程 ID ps auxZ,但这似乎是一个有点丑陋的解决方案。
我想配置我的 sshd 以允许用户使用密钥对进行身份验证,然后回退到密码身份验证。但是我正在努力从手册页/ sshd_config 文件中的信息中实现这一目标。
我的 sshd_config:
Protocol 2
SyslogFacility AUTHPRIV
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
UsePAM yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL
X11Forwarding yes
Subsystem sftp /usr/libexec/openssh/sftp-server
Run Code Online (Sandbox Code Playgroud)
当我连接时,似乎正在发送私钥 - 但我仍然收到输入密码的提示:
[colinm@server bin]$ ssh -v colinm@dev-server
OpenSSH_4.3p2, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to dev-server [10.168.172.81] port 22. …Run Code Online (Sandbox Code Playgroud) 我正在编写一个 bash 脚本来在 Synology 机器上构建 MariaDB 实例。当我运行它时,它可以工作,但出现错误:
admin@synology:/volume1/@appstore/MariaDB10/usr/local/bip$ ./mysql_backup
./mysql_backup: line 7: [: missing `]'
admin@synology:/volume1/@appstore/MariaDB10/usr/local/bip$ head -10 mysql_backup
#!/bin/bash
DBBACKUP=/volume1/remotebackup/mnt/devmysql.sql.gz
ERRFILE=/volume1/remotebackup/mnt/devmysqlerr.log
if [ -f "${DBBACKUP}.prev" && ! -f "${ERRFILE}" ] ; then
rm -f "${DBBACKUP}.prev"
mv "${DBBACKUP}" "${DBBACKUP}.prev"
fi
Run Code Online (Sandbox Code Playgroud)
添加一个空格和第二个关闭']',我仍然得到同样的错误。嵌套 'if' 语句提供了一个解决方案,但令我烦恼的是有些事情并不像我预期的那样。
我正在向 .bashrc 添加一些别名,以阻止人们使用标准命令,因为在这些命令中需要更复杂的过程才能实现所需的结果。但是,如果从脚本调用别名,我该如何设置退出代码?理想情况下不会产生像“没有这样的文件或目录”这样的虚假错误消息(我确实找到了这个,但肯定有更干净的方法?)
例如
alias useradd='echo "Nope....you should be using the custom script."'
Run Code Online (Sandbox Code Playgroud)
应该导致......
# useradd newuser
Nope....you should be using the custom script.
# echo $?
-1
#
Run Code Online (Sandbox Code Playgroud)