我有这个:
date +"%H hours and %M minutes"
Run Code Online (Sandbox Code Playgroud)
我用节日来表达..但它说:“零九小时”..我想让它说“九小时”!
但是 date 总是给我 09 ......所以我想知道 bash 是否可以轻松地使它变成 9 ?
在我试过的复杂脚本中
printf %d 09
Run Code Online (Sandbox Code Playgroud)
但它失败了..不是八进制:(
任何的想法?
我有这个数组:
declare -A astr
Run Code Online (Sandbox Code Playgroud)
我向它添加元素:
astr[elemA]=123
astr[elemB]=199
Run Code Online (Sandbox Code Playgroud)
但稍后我需要知道什么是索引 ID(elemA 和 elemB)并列出它们。
echo "${astr[@]}" #this only get me the values...
Run Code Online (Sandbox Code Playgroud) 我正在尝试找到一种强制重新映射键盘键的方法。
我尝试使用 xmodmap 和 setxkbmap,但它们不适用于某个特定应用程序。此类命令适用于 X tho 上的其他普通窗口/应用程序。
我认为应用程序可能正在读取键盘原始数据并忽略 X 输入?
那么,如何在不使用 xmodmap 和 setxkbmap 的情况下重新映射密钥?如果有可能使用某些软件来完成。
我也试过 xkeycaps、xkbcomp,但没有试过 loadkeys,因为它在 X 上运行。
我在这里发现我可以尝试setkeycodes,“因为在分配内核键码后,按钮应该在 xorg 中工作”,但我也发现“你不能在 USB 键盘上使用‘setkeycodes’”,这就是我的情况(我对 case 感兴趣有人让它在 ps2 上工作,因为我认为我可以使用适配器)。
这似乎很有希望“将扫描码映射到键码”,但经过几次测试后,没有任何变化,它们如下:
我在 vt1 处找到了键码“36”(“j”键),showkey
我发现扫描码“7e”(键盘“.”)在vt1 与showkey --scancodes
$cat >/etc/udev/hwdb.d/90-custom-keyboard.hwdb
keyboard:usb:v*p*
keyboard:dmi:bvn*:bvr*:bd*:svn*:pn*:pvr*
KEYBOARD_KEY_7e=36
$udevadm hwdb --update #updates file: /lib/udev/hwdb.bin
$udevadm trigger #should apply the changes but nothing happened
$cat /lib/udev/hwdb.bin |egrep "KEYBOARD_KEY_7e.{10}" -ao
KEYBOARD_KEY_7eleftmeta
$#that cat on hwdb.bin did …Run Code Online (Sandbox Code Playgroud) 如果我运行此命令,则find $HOME/MySymlinkedPath -name "run*.sh"不会发生任何事情,并且不会出现任何错误(“MySymlinkedPath”是到另一个硬盘驱动器的符号链接路径,而不是我的 $HOME 驱动器)。
这些也失败了:
find ~/MySymlinkedPath -name "run*.sh"
find /home/MyUserName/MySymlinkedPath -name "run*.sh"
Run Code Online (Sandbox Code Playgroud)
为了确保这一点,这条不存在的路径失败了(当然)find $HOME/MySymlinkedPathDUMMYTEST -name "run*.sh"所以正在找到路径(因为没有发生该错误)但find没有对其执行搜索,我现在很无能为力。
它仅在我cd $HOME/MySymlinkedPath首先删除这样的路径引用时才有效,find -name "run*.sh"但这对我的脚本不利。
附加信息:
这个命令照常工作ls $HOME/MySymlinkedPath/run*.sh,如果我去那里cd $HOME/MySymlinkedPath运行它ls ..,结果不是我所期望的——符号链接路径所在的路径列表——它返回真实路径的列表另一个媒体/硬盘驱动器!!!
pwd -P
/media/MediaIdentifier/RealPath
pwd
/home/MyUser/MySymlinkedPath
Run Code Online (Sandbox Code Playgroud)
重新思考:
这是findand的问题ls,还是我的系统的问题?或者这是预期的,根本不是问题??我在 Ubuntu 12.10 上。它在我测试的所有终端上都失败了,所以似乎不是终端“问题”。
n=0;
((n++));echo "ret=$?;n=$n;"
((n++));echo "ret=$?;n=$n;"
((n++));echo "ret=$?;n=$n;"
Run Code Online (Sandbox Code Playgroud)
从那时n=1起,((n++))工作正常,
只有当n=0,((n++))返回错误,
而我正在使用trap '' ERR导致问题的一个
这是一些错误吗?
在 bash 中。
我很难确定我应该使用什么?
我所有的脚本都使用“>>/dev/stderr”
在bash提示符,如果我尝试:
echo test >>/dev/stderr作品
echo test >> /dev/stderr作品
echo test >/dev/stderr作品
echo test > /dev/stderr作品
echo test >>&2失败!
echo test >> &2失败!
echo test >&2工作
echo test > &2失败!
我愿意将所有脚本更改为>&2.
它似乎对 ssh (之后su SomeUser)也有很大影响,在那里>>/dev/stderr根本不起作用(权限被拒绝),只会>&2起作用。
考虑:
echo -e "a\nb\nc\nd\ne\nf\ng\nh" | sed '3,5a test'
Run Code Online (Sandbox Code Playgroud)
这将匹配第 3、4 和 5 行。
但我试图只匹配第 3 行和第 5 行(而不是第 4 行)。并在它们之后附加“测试”。
因此,我需要在 shell 之间共享环境变量,并且所有 shell 都可以及时识别变量的更改,例如全局变量。但它们必须与主 PID 相关,因此我可以运行 2 个 shell 脚本,每个脚本都是具有相同全局变量名称的主控,它的子级只会更改与其主 PID 相关的变量。
我bash用于编写脚本。
我目前的研究是这些:
我读过的模块我可以使用模块项目:http://modules.sourceforge.net/,但我在尝试这样做时遇到了巨大的麻烦,它似乎缺乏示例?“模块”也是一个太笼统的词,很难用谷歌搜索,因为它与许多其他东西混合在一起……几周后我的手还是空的……
我也读过的简单文本源文件我应该使用一个简单的文本文件来存储/更新/读取变量,作为源脚本文件,使用flock太以避免并发写入。但是存在与此相关的问题,例如 2 个 shell 同时并发更改变量。
或者,
我知道在 shell 读取“全局”变量后,它将保留该值,直到进行另一次读取;另一个shell也可能同时改变它......
可能是一个非常快的外部应用程序可以提供这样的存储,然后我们不会尝试使用环境变量作为全局变量?但我的猜测是任何 SQL 解决方案都会太慢......
最后几天我在运行一致时遇到此异常:
“加载存档时引发 End_of_file 异常”(这表明存在错误!)
它没有帮助,我无法在谷歌的其他地方找到答案,请大家谈谈但似乎无法解决?
我检查了我的文件,有损坏的符号链接,但以前从来没有问题..
完整的命令基本上是:
unison "$PATH1" "$PATH2"
-links false
-fastcheck true
-times
-retry 2
-follow "Regex .*"
-force "$PATH1"
-nodeletion "$PATH1"
-nodeletion "$PATH2"
-batch
-ui text
检查这个脚本:
#!/bin/bash
if true;then
alias WeirdTest='uptime';shopt -s expand_aliases
WeirdTest
fi
WeirdTest
Run Code Online (Sandbox Code Playgroud)
第一次WeirdTest执行它说“找不到命令”。