LinuxおよびSolaris(Nexenta)用のスクリプトを使用しています。
この行はLinuxでは機能しますが、solarisでは機能しません(ただし、シェルから実行すると機能します)。
cat "pg_hba.conf" | sed "0,/^local/{s/md5/trust/}"
エラーメッセージは次のとおりです。
sed: command garbled: 0,/^local/{s/md5/trust/}
いくつかの調査の後sed
、スクリプトでbashが使用するものが異なることがわかりました。
シェルから: /usr/bin/sed
スクリプトから: /usr/sun/bin/sed
スクリプトを使用させたい/usr/bin/sed
。
私がやろうとしたこと:
sed
フルパスで呼び出します。同じ結果。それはまだ他を使用しているようsed
です...- 経由で呼び出そうとしました
bash -l
。同じ結果。 - 別のコマンドを宣言しようとしました:代わりに
S=/usr/lib/sed
使用し$S
ます。同じ結果。 - PATHをチェック-cmdとスクリプトの両方に含ま
/usr/bin
れています。 - 二重引用符を単一に置き換えようとしました。同じ結果。
-rフラグを指定してsedを実行してみました。出力は次のとおりです。
# /usr/xpg4/bin/sed -r /usr/xpg4/bin/sed: illegal option -- r Usage: sed [-n] script [file...] sed [-n] [-e script]...[-f script_file]...[file...]
助けて??
「ローカル」で始まる最初の行で、「md5」の最初の一致を「信頼」に置き換える必要があります。そうでない場合でもできることはわかっていますが、sed
問題はかゆみが多すぎることです!
編集:
私はこれが少し注文をすることを望みます...
- ログインシェルからのパス=
/usr/local/ctera/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/ctera/apache-ant-1.8.2/bin
- スクリプトからのパス=
/usr/sbin:/usr/bin:/usr/local/ctera/apache-ant-1.8.2/bin:/usr/local/ctera/apache-ant-1.8.2/bin
PATH=$(command -p getconf PATH):$PATH
呼び出されたときのスクリプトからのパス=/usr/xpg4/bin:/usr/ccs/bin:/usr/bin:/opt/SUNWspro/bin:/usr/xpg4/bin:/usr/ccs/bin:/usr/bin:/opt/SUNWspro/bin:/usr/sbin:/usr/bin:/usr/local/ctera/apache-ant-1.8.2/bin:/usr/local/ctera/apache-ant-1.8.2/bin
truss -f sed
ログインシェル呼び出しから/usr/bin/sed
truss -f sed
スクリプト呼び出しから/usr/sun/bin/sed
truss -f /usr/bin/sed
スクリプト呼び出しから/usr/sun/bin/sed
!!!- 設定後
PATH=$(command -p getconf PATH):$PATH
:
7.1をtruss -f sed
スクリプトから呼び出す/usr/xpg4/bin/sed
7.2をtruss -f /usr/bin/sed
スクリプトの呼び出しから/usr/sun/bin/sed
!
詳細:
コマンド出力:(シェルプロンプトとスクリプト内の両方から実行)
truss -ft execve /usr/bin/sed q
シェルコマンドとして:
8604: execve("/usr/bin/sed", 0x08047D20, 0x08047D2C) argc = 2
スクリプトから:
8545: execve("/usr/sun/bin/sed", 0x08047768, 0x08047774) argc = 2
file /usr/bin/sed
シェルコマンドとして:
/usr/bin/sed: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), stripped
スクリプトから:
file: /usr/bin/sed zero size or zero entry ELF section - ELF capabilities ignored file: /usr/bin/sed: can't read ELF header /usr/bin/sed: data
ls -l /usr/bin/sed
シェルコマンドとして:
-rwxr-xr-x 1 root root 96440 May 31 2008 /usr/bin/sed
スクリプトから:
-rwxr-xr-x 1 root root 96440 May 31 2008 /usr/bin/sed
ls -ld $(type -pa sed)
シェルコマンドとして:
-rwxr-xr-x 1 root root 96440 May 31 2008 /bin/sed -rwxr-xr-x 1 root root 96440 May 31 2008 /usr/bin/sed
スクリプトから:
-rwxr-xr-x 1 root root 96440 May 31 2008 /usr/bin/sed
md5sum $(type -pa sed)
シェルコマンドとして:
385361c5111226c8eac8e25b53fed29c /bin/sed 385361c5111226c8eac8e25b53fed29c /usr/bin/sed
スクリプトから:
385361c5111226c8eac8e25b53fed29c /usr/bin/sed
スクリプトはJAVAコードによって呼び出されます。
uname -a
SunOS cteraportal 5.11 NexentaOS_134f i86pc i386 i86pc Solaris
これ
sed
により、マシンのバージョンに関する情報が追加される場合があります~# ll `find / -name sed` -rwxr-xr-x 1 root root 96440 May 31 2008 /usr/bin/sed -r-xr-xr-x 1 root bin 35656 Sep 7 2010 /usr/sun/bin/sed -r-xr-xr-x 1 root bin 32104 Sep 7 2010 /usr/ucb/sed -r-xr-xr-x 1 root bin 35636 Sep 7 2010 /usr/xpg4/bin/sed /usr/share/doc/sed: total 113 -rw-r--r-- 1 root root 168 Jun 21 2005 AUTHORS.gz -rw-r--r-- 1 root root 2507 Jun 21 2005 BUGS.gz -rw-r--r-- 1 root root 6584 Feb 3 2006 NEWS.gz -rw-r--r-- 1 root root 285 Jun 21 2005 README.gz -rw-r--r-- 1 root root 1071 Jan 12 2006 THANKS.gz -rw-r--r-- 1 root root 4806 May 31 2008 changelog.Debian.gz -rw-r--r-- 1 root root 32312 Feb 3 2006 changelog.gz -rw-r--r-- 1 root root 796 May 31 2008 copyright drwxr-xr-x 2 root root 3 May 30 2011 examples drwxr-xr-x 2 root root 3 May 30 2011 sed-4.1.5 -rw-r--r-- 1 root root 56538 May 31 2008 sedfaq.txt.gz
0,
なっていますか?
sed
コマンドでは、構文的に正しくない可能性があります。通常、呼び出すsed
と、フラグが続きます。例:sed 's/cat/dog/g'