実は以下にも同じ質問があったのですが、回答がついてなかったので改めて質問させて頂きます。
cshで以下の様な形で"ls"の結果をシェル変数に取りたいのですが:
set list = `ls *.s | sed -n 's/\.s//p'`
lsの結果がマッチしなかったときに出力されるメッセージ:
ls: 照合パターンに合いません.
がコンソールに出力されると誤解を招くのでそれをやめさせたいのですが、何か良い方法はないでしょうか?
色々試しましたが簡単な方法は無い様な気がしています。
[コマンド]
set list = `ls *.s | sed -n 's/\.s//p'`
[例]
(1) OKケース
%>ls *.s
aaa.s bbb.s
結果==> aaa bbb
(2) NGケース
%> ls *s
ls: 照合パターンに合いません.
[とりあえずやりたい事を実現する方法]
ls *.s >& /dev/null
if($status == 0) then
# ls is matched
set list = `ls *.s | sed -n 's/\.s//p'`
endif
※ 冗長でかつ処理速度が遅いという問題があろうかと思います。
[以前の質問]
http://www.okweb.ne.jp/kotaeru.php3?q=825419
以上宜しくお願いいたします。
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
あれれ、ls|sedしてからSTDERRを/dev/nullに捨てるのは簡単でしたが、lsの時点で捨ててSTDOUTだけを引き渡すのは難しいですね!!自信ありだったのにすみません。
No.5で紹介されているリンク先では一発めに問題点としてあがっていますね。
私は大学時代にBSDを使っていてCシェルがメインでしたが、仕事やシステム管理をするようになってからはkshかbashを使っています(^^;
No.5
- 回答日時:
こんな簡単なこともできないcshはプログラミングでは使うなといことですね。
どうしてものときは
( hoge.sh > /dev/tty ) > & /dev/null
のようにシェル全体をやるしかないでしょう。
参考URL:http://www.faqs.org/faqs/unix-faq/shell/csh-whyn …
No.4
- 回答日時:
#1です。
手元の環境にて、以下のようなテストスクリプトを作成して実行しています。
##------------
#!/bin/csh
echo '## 1 File Exist ##'
touch aaa.s bbb.s
set list = `ls *.s | sed -n 's/\.s//p'`
echo $list
rm *.s
echo '## 2 File Not Exist ##'
set list = `ls *.s | sed -n 's/\.s//p'`
echo $list
touch aaa.s bbb.s
echo '## 3 File Exist ##'
set list = `(ls *.s | sed -n 's/\.s//p' > /dev/tty) >& /dev/null`
echo $list
rm *.s
echo '## 4 File Not Exist ##'
set list = `(ls *.s | sed -n 's/\.s//p' > /dev/tty) >& /dev/null`
echo $list
##------------
以下は実行結果です。
{134}# csh list_get.csh
## 1 File Exist ##
aaa bbb
## 2 File Not Exist ##
ls: No match.
## 3 File Exist ##
aaa
bbb
## 4 File Not Exist ##
{135}# tcsh list_get.csh
## 1 File Exist ##
aaa bbb
## 2 File Not Exist ##
ls: 照合パターンに合いません.
## 3 File Exist ##
aaa
bbb
## 4 File Not Exist ##
環境は、FreeBSD2.2.8のcsh及びtcshにて確認しました。
あと、Cygwin上のtcshでも確認できています。
若干データの格納のされ方に違いがあるものの、きちんと取得は出来ていますし、一応の目的は達せられていると思います。
やっていることは決して特殊なことではないので、普通はこれで動くと思うんですが・・・
No.3
- 回答日時:
lsの結果がマッチしなかったときに出力されるメッセージは標準エラーに書かれます。
cshの操作で、標準出力と標準エラーの振り分けの基本形は( コマンド > 標準出力 ) >& 標準エラー
これを応用するとNo.1でかかれているように、標準出力はTTYへ、エラーはブラックホールへ振り分けということができるわけです。
有難うございます。
はい、基本形はその通りであると認識していますが、この標準出力のみを取り出すことが出来ずに困っています。試しに以下のようにして見てください。/dev/ttyへ取り出した出力はその後のパイプで取得が出来ていません。なぜならパタンマッチが行われていないからです。
[試行1]
touch aaa.s bbb.s; ((ls *.s > /dev/tty) >& /dev/null) | sed -n "s/\.s//p"
[試行2]
touch aaa.s bbb.s; (ls *.s | sed -n "s/\.s//p") >& /dev/null
ninja_ex250さんの通りの動作であれば結果は
aaa bbb
と期待されますが実際には
aaa.s bbb.s
あるいは
<<blank>>
となります。
以上引き続き宜しくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- ルーター・ネットワーク機器 transix回線で契約、外部からIPv6でNASにアクセスしたい 1 2023/01/26 15:07
- その他(プログラミング・Web制作) ヒアドキュメントの書き方 4 2022/11/01 01:03
- 工学 制御工学の問題について 1 2022/10/22 17:44
- UNIX・Linux Kali Linuxで起動できない - Minimal BASH Like Line Editing 1 2022/06/03 13:14
- DIY・エクステリア 中空用アンカーでモールダクトを固定 1 2022/11/27 00:48
- その他(悩み相談・人生相談) 走行距離13万キロ前法人所有ワンオーナーのLSを買おうか迷っているのですが、すぐ壊れると思いますか? 2 2023/02/25 18:35
- UNIX・Linux cronの@rebootでのdateコマンドの実行につきまして 2 2023/06/11 16:23
- その他(データベース) AWSのcloud9で「 ls -l ~/.ssh/」のコマンドで公開鍵、 秘密鍵を知ろうとすると「 1 2023/07/09 02:10
- UNIX・Linux ワイルドカードの使い方 4 2023/08/08 20:51
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FTPコマンドの戻り値について
-
UNIX Cシェルで実数の比較
-
コマンド終了ステータス
-
lsコマンドの色設定が反映されない
-
シェルスクリプトのYes、Noの入...
-
Mac OSXのターミナルでemacsを起動
-
scpコマンドでリモートサーバの...
-
Viで書き込もうとすると、保...
-
GNOME端末の起動 及び コマンド...
-
/ が何時の間にか「Read-only f...
-
Illustratorのデータをまとめて...
-
書き込み権限が無いためコピー...
-
cactiでグラフが表示されない
-
netshでipv6がインストールでき...
-
コマンドでのコンピュータ名変...
-
OS がインストールされているデ...
-
cron登録不可(´・ω・`)
-
e2fsckの実行について
-
/optのアクセス権を変更したい...
-
Linux shell ftp 転送 エラー制御
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンド終了ステータス
-
FTPコマンドの戻り値について
-
cronでftp自動転送を行いたい
-
diskpart でパーティションの一...
-
cshで変数名の入れ子ができない
-
lsコマンドの色設定が反映されない
-
複数の処理を順番にログアウト...
-
cshの標準出力を制御したい
-
実行中のシェルスクリプト自体...
-
UNIX Cシェルで実数の比較
-
Mac OSXのターミナルでemacsを起動
-
shellから起動したkterm上でコ...
-
telnet へのパイプができないです
-
Bシェルでパイプ→exitがうまく...
-
シェルスクリプトからPHP実行
-
空白を含んだシェル変数の代入
-
ping -cコマンドで指定した個数...
-
kshでのcase文条件範囲について
-
cronでaws_s3にデータを格納す...
-
vsftpd FTP転送を行うシェルス...
おすすめ情報