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/bintruss -f sedログインシェル呼び出しから/usr/bin/sedtruss -f sedスクリプト呼び出しから/usr/sun/bin/sedtruss -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 = 2file /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: datals -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/sedls -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/sedmd5sum $(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'